{"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: 5378040 bytes, number of entries: 404\n+Zip file size: 5377911 bytes, number of entries: 404\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat    76637 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      263 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     7850 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.xml\n--rw----     2.0 fat     1293 bX stor 70-Jan-01 00:00 build.properties\n+-rw----     2.0 fat     1188 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/2.0.0-M3/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M3/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/2.0.0-M3/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-amqp-nar/\n@@ -398,9 +398,9 @@\n -rw----     2.0 fat     3375 bX stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M3/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/2.0.0-M3/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/2.0.0-M3/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/2.0.0-M3/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M3/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/2.0.0-M3/org.apache.nifi.services.zendesk.ZendeskRecordSink/additionalDetails.html\n--rw----     2.0 fat  4209579 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n-404 files, 5259038 bytes uncompressed, 5259038 bytes compressed:  0.0%\n+-rw----     2.0 fat  4209555 bX stor 70-Jan-01 00:00 nifi-runtime-manifest.json\n+404 files, 5258909 bytes uncompressed, 5258909 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -270,21312 +270,21312 @@\n #\n 017B53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 017B55   Length              0005 (5)\n 017B57   Flags               01 (1) 'Modification'\n 017B58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 017B5C PAYLOAD\n \n-018069 DATA DESCRIPTOR       08074B50 (134695760)\n-01806D CRC                   A60F7060 (2786029664)\n-018071 Compressed Size       0000050D (1293)\n-018075 Uncompressed Size     0000050D (1293)\n-\n-018079 LOCAL HEADER #12      04034B50 (67324752)\n-01807D Extract Zip Spec      14 (20) '2.0'\n-01807E Extract OS            00 (0) 'MS-DOS'\n-01807F General Purpose Flag  0000 (0)\n-018081 Compression Method    0000 (0) 'Stored'\n-018083 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018087 CRC                   00000000 (0)\n-01808B Compressed Size       00000000 (0)\n-01808F Uncompressed Size     00000000 (0)\n-018093 Filename Length       0005 (5)\n-018095 Extra Length          0009 (9)\n-018097 Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x18097: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-01809C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01809E   Length              0005 (5)\n-0180A0   Flags               01 (1) 'Modification'\n-0180A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0180A5 LOCAL HEADER #13      04034B50 (67324752)\n-0180A9 Extract Zip Spec      14 (20) '2.0'\n-0180AA Extract OS            00 (0) 'MS-DOS'\n-0180AB General Purpose Flag  0000 (0)\n-0180AD Compression Method    0000 (0) 'Stored'\n-0180AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0180B3 CRC                   00000000 (0)\n-0180B7 Compressed Size       00000000 (0)\n-0180BB Uncompressed Size     00000000 (0)\n-0180BF Filename Length       0015 (21)\n-0180C1 Extra Length          0009 (9)\n-0180C3 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x180C3: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0180D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0180DA   Length              0005 (5)\n-0180DC   Flags               01 (1) 'Modification'\n-0180DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0180E1 LOCAL HEADER #14      04034B50 (67324752)\n-0180E5 Extract Zip Spec      14 (20) '2.0'\n-0180E6 Extract OS            00 (0) 'MS-DOS'\n-0180E7 General Purpose Flag  0000 (0)\n-0180E9 Compression Method    0000 (0) 'Stored'\n-0180EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0180EF CRC                   00000000 (0)\n-0180F3 Compressed Size       00000000 (0)\n-0180F7 Uncompressed Size     00000000 (0)\n-0180FB Filename Length       0027 (39)\n-0180FD Extra Length          0009 (9)\n-0180FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x180FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018126 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018128   Length              0005 (5)\n-01812A   Flags               01 (1) 'Modification'\n-01812B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01812F LOCAL HEADER #15      04034B50 (67324752)\n-018133 Extract Zip Spec      14 (20) '2.0'\n-018134 Extract OS            00 (0) 'MS-DOS'\n-018135 General Purpose Flag  0000 (0)\n-018137 Compression Method    0000 (0) 'Stored'\n-018139 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01813D CRC                   00000000 (0)\n-018141 Compressed Size       00000000 (0)\n-018145 Uncompressed Size     00000000 (0)\n-018149 Filename Length       0030 (48)\n-01814B Extra Length          0009 (9)\n-01814D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1814D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01817D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01817F   Length              0005 (5)\n-018181   Flags               01 (1) 'Modification'\n-018182   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018186 LOCAL HEADER #16      04034B50 (67324752)\n-01818A Extract Zip Spec      14 (20) '2.0'\n-01818B Extract OS            00 (0) 'MS-DOS'\n-01818C General Purpose Flag  0000 (0)\n-01818E Compression Method    0000 (0) 'Stored'\n-018190 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018194 CRC                   00000000 (0)\n-018198 Compressed Size       00000000 (0)\n-01819C Uncompressed Size     00000000 (0)\n-0181A0 Filename Length       0067 (103)\n-0181A2 Extra Length          0009 (9)\n-0181A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x181A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01820B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01820D   Length              0005 (5)\n-01820F   Flags               01 (1) 'Modification'\n-018210   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018214 LOCAL HEADER #17      04034B50 (67324752)\n-018218 Extract Zip Spec      14 (20) '2.0'\n-018219 Extract OS            00 (0) 'MS-DOS'\n-01821A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01821C Compression Method    0000 (0) 'Stored'\n-01821E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018222 CRC                   00000000 (0)\n-018226 Compressed Size       00000000 (0)\n-01822A Uncompressed Size     00000000 (0)\n-01822E Filename Length       007D (125)\n-018230 Extra Length          0009 (9)\n-018232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0182AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0182B1   Length              0005 (5)\n-0182B3   Flags               01 (1) 'Modification'\n-0182B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0182B8 PAYLOAD\n-\n-018D5A DATA DESCRIPTOR       08074B50 (134695760)\n-018D5E CRC                   9CB4EC6B (2629102699)\n-018D62 Compressed Size       00000AA2 (2722)\n-018D66 Uncompressed Size     00000AA2 (2722)\n-\n-018D6A LOCAL HEADER #18      04034B50 (67324752)\n-018D6E Extract Zip Spec      14 (20) '2.0'\n-018D6F Extract OS            00 (0) 'MS-DOS'\n-018D70 General Purpose Flag  0000 (0)\n-018D72 Compression Method    0000 (0) 'Stored'\n-018D74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018D78 CRC                   00000000 (0)\n-018D7C Compressed Size       00000000 (0)\n-018D80 Uncompressed Size     00000000 (0)\n-018D84 Filename Length       0023 (35)\n-018D86 Extra Length          0009 (9)\n-018D88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18D88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018DAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018DAD   Length              0005 (5)\n-018DAF   Flags               01 (1) 'Modification'\n-018DB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018DB4 LOCAL HEADER #19      04034B50 (67324752)\n-018DB8 Extract Zip Spec      14 (20) '2.0'\n-018DB9 Extract OS            00 (0) 'MS-DOS'\n-018DBA General Purpose Flag  0000 (0)\n-018DBC Compression Method    0000 (0) 'Stored'\n-018DBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018DC2 CRC                   00000000 (0)\n-018DC6 Compressed Size       00000000 (0)\n-018DCA Uncompressed Size     00000000 (0)\n-018DCE Filename Length       002C (44)\n-018DD0 Extra Length          0009 (9)\n-018DD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18DD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018DFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018E00   Length              0005 (5)\n-018E02   Flags               01 (1) 'Modification'\n-018E03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018E07 LOCAL HEADER #20      04034B50 (67324752)\n-018E0B Extract Zip Spec      14 (20) '2.0'\n-018E0C Extract OS            00 (0) 'MS-DOS'\n-018E0D General Purpose Flag  0000 (0)\n-018E0F Compression Method    0000 (0) 'Stored'\n-018E11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018E15 CRC                   00000000 (0)\n-018E19 Compressed Size       00000000 (0)\n-018E1D Uncompressed Size     00000000 (0)\n-018E21 Filename Length       0058 (88)\n-018E23 Extra Length          0009 (9)\n-018E25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18E25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018E7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018E7F   Length              0005 (5)\n-018E81   Flags               01 (1) 'Modification'\n-018E82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-018E86 LOCAL HEADER #21      04034B50 (67324752)\n-018E8A Extract Zip Spec      14 (20) '2.0'\n-018E8B Extract OS            00 (0) 'MS-DOS'\n-018E8C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-018E8E Compression Method    0000 (0) 'Stored'\n-018E90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-018E94 CRC                   00000000 (0)\n-018E98 Compressed Size       00000000 (0)\n-018E9C Uncompressed Size     00000000 (0)\n-018EA0 Filename Length       006E (110)\n-018EA2 Extra Length          0009 (9)\n-018EA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18EA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-018F12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-018F14   Length              0005 (5)\n-018F16   Flags               01 (1) 'Modification'\n-018F17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-018F1B PAYLOAD\n-\n-019EDA DATA DESCRIPTOR       08074B50 (134695760)\n-019EDE CRC                   445AD7B2 (1146804146)\n-019EE2 Compressed Size       00000FBF (4031)\n-019EE6 Uncompressed Size     00000FBF (4031)\n-\n-019EEA LOCAL HEADER #22      04034B50 (67324752)\n-019EEE Extract Zip Spec      14 (20) '2.0'\n-019EEF Extract OS            00 (0) 'MS-DOS'\n-019EF0 General Purpose Flag  0000 (0)\n-019EF2 Compression Method    0000 (0) 'Stored'\n-019EF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-019EF8 CRC                   00000000 (0)\n-019EFC Compressed Size       00000000 (0)\n-019F00 Uncompressed Size     00000000 (0)\n-019F04 Filename Length       0058 (88)\n-019F06 Extra Length          0009 (9)\n-019F08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19F08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-019F60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019F62   Length              0005 (5)\n-019F64   Flags               01 (1) 'Modification'\n-019F65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-019F69 LOCAL HEADER #23      04034B50 (67324752)\n-019F6D Extract Zip Spec      14 (20) '2.0'\n-019F6E Extract OS            00 (0) 'MS-DOS'\n-019F6F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-019F71 Compression Method    0000 (0) 'Stored'\n-019F73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-019F77 CRC                   00000000 (0)\n-019F7B Compressed Size       00000000 (0)\n-019F7F Uncompressed Size     00000000 (0)\n-019F83 Filename Length       006E (110)\n-019F85 Extra Length          0009 (9)\n-019F87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x19F87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-019FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-019FF7   Length              0005 (5)\n-019FF9   Flags               01 (1) 'Modification'\n-019FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-019FFE PAYLOAD\n-\n-01B6DC DATA DESCRIPTOR       08074B50 (134695760)\n-01B6E0 CRC                   A2A96EA2 (2729012898)\n-01B6E4 Compressed Size       000016DE (5854)\n-01B6E8 Uncompressed Size     000016DE (5854)\n-\n-01B6EC LOCAL HEADER #24      04034B50 (67324752)\n-01B6F0 Extract Zip Spec      14 (20) '2.0'\n-01B6F1 Extract OS            00 (0) 'MS-DOS'\n-01B6F2 General Purpose Flag  0000 (0)\n-01B6F4 Compression Method    0000 (0) 'Stored'\n-01B6F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B6FA CRC                   00000000 (0)\n-01B6FE Compressed Size       00000000 (0)\n-01B702 Uncompressed Size     00000000 (0)\n-01B706 Filename Length       002F (47)\n-01B708 Extra Length          0009 (9)\n-01B70A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B70A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B739 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B73B   Length              0005 (5)\n-01B73D   Flags               01 (1) 'Modification'\n-01B73E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B742 LOCAL HEADER #25      04034B50 (67324752)\n-01B746 Extract Zip Spec      14 (20) '2.0'\n-01B747 Extract OS            00 (0) 'MS-DOS'\n-01B748 General Purpose Flag  0000 (0)\n-01B74A Compression Method    0000 (0) 'Stored'\n-01B74C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B750 CRC                   00000000 (0)\n-01B754 Compressed Size       00000000 (0)\n-01B758 Uncompressed Size     00000000 (0)\n-01B75C Filename Length       0038 (56)\n-01B75E Extra Length          0009 (9)\n-01B760 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B760: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B79A   Length              0005 (5)\n-01B79C   Flags               01 (1) 'Modification'\n-01B79D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B7A1 LOCAL HEADER #26      04034B50 (67324752)\n-01B7A5 Extract Zip Spec      14 (20) '2.0'\n-01B7A6 Extract OS            00 (0) 'MS-DOS'\n-01B7A7 General Purpose Flag  0000 (0)\n-01B7A9 Compression Method    0000 (0) 'Stored'\n-01B7AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B7AF CRC                   00000000 (0)\n-01B7B3 Compressed Size       00000000 (0)\n-01B7B7 Uncompressed Size     00000000 (0)\n-01B7BB Filename Length       0068 (104)\n-01B7BD Extra Length          0009 (9)\n-01B7BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B7BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B827 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B829   Length              0005 (5)\n-01B82B   Flags               01 (1) 'Modification'\n-01B82C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01B830 LOCAL HEADER #27      04034B50 (67324752)\n-01B834 Extract Zip Spec      14 (20) '2.0'\n-01B835 Extract OS            00 (0) 'MS-DOS'\n-01B836 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01B838 Compression Method    0000 (0) 'Stored'\n-01B83A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01B83E CRC                   00000000 (0)\n-01B842 Compressed Size       00000000 (0)\n-01B846 Uncompressed Size     00000000 (0)\n-01B84A Filename Length       007E (126)\n-01B84C Extra Length          0009 (9)\n-01B84E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B84E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01B8CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01B8CE   Length              0005 (5)\n-01B8D0   Flags               01 (1) 'Modification'\n-01B8D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01B8D5 PAYLOAD\n-\n-01CDE7 DATA DESCRIPTOR       08074B50 (134695760)\n-01CDEB CRC                   7416DF2A (1947655978)\n-01CDEF Compressed Size       00001512 (5394)\n-01CDF3 Uncompressed Size     00001512 (5394)\n-\n-01CDF7 LOCAL HEADER #28      04034B50 (67324752)\n-01CDFB Extract Zip Spec      14 (20) '2.0'\n-01CDFC Extract OS            00 (0) 'MS-DOS'\n-01CDFD General Purpose Flag  0000 (0)\n-01CDFF Compression Method    0000 (0) 'Stored'\n-01CE01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01CE05 CRC                   00000000 (0)\n-01CE09 Compressed Size       00000000 (0)\n-01CE0D Uncompressed Size     00000000 (0)\n-01CE11 Filename Length       0022 (34)\n-01CE13 Extra Length          0009 (9)\n-01CE15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1CE15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01CE37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01CE39   Length              0005 (5)\n-01CE3B   Flags               01 (1) 'Modification'\n-01CE3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01CE40 LOCAL HEADER #29      04034B50 (67324752)\n-01CE44 Extract Zip Spec      14 (20) '2.0'\n-01CE45 Extract OS            00 (0) 'MS-DOS'\n-01CE46 General Purpose Flag  0000 (0)\n-01CE48 Compression Method    0000 (0) 'Stored'\n-01CE4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01CE4E CRC                   00000000 (0)\n-01CE52 Compressed Size       00000000 (0)\n-01CE56 Uncompressed Size     00000000 (0)\n-01CE5A Filename Length       002B (43)\n-01CE5C Extra Length          0009 (9)\n-01CE5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1CE5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01CE89 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01CE8B   Length              0005 (5)\n-01CE8D   Flags               01 (1) 'Modification'\n-01CE8E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01CE92 LOCAL HEADER #30      04034B50 (67324752)\n-01CE96 Extract Zip Spec      14 (20) '2.0'\n-01CE97 Extract OS            00 (0) 'MS-DOS'\n-01CE98 General Purpose Flag  0000 (0)\n-01CE9A Compression Method    0000 (0) 'Stored'\n-01CE9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01CEA0 CRC                   00000000 (0)\n-01CEA4 Compressed Size       00000000 (0)\n-01CEA8 Uncompressed Size     00000000 (0)\n-01CEAC Filename Length       0065 (101)\n-01CEAE Extra Length          0009 (9)\n-01CEB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1CEB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01CF15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01CF17   Length              0005 (5)\n-01CF19   Flags               01 (1) 'Modification'\n-01CF1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01CF1E LOCAL HEADER #31      04034B50 (67324752)\n-01CF22 Extract Zip Spec      14 (20) '2.0'\n-01CF23 Extract OS            00 (0) 'MS-DOS'\n-01CF24 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01CF26 Compression Method    0000 (0) 'Stored'\n-01CF28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01CF2C CRC                   00000000 (0)\n-01CF30 Compressed Size       00000000 (0)\n-01CF34 Uncompressed Size     00000000 (0)\n-01CF38 Filename Length       007B (123)\n-01CF3A Extra Length          0009 (9)\n-01CF3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1CF3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01CFB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01CFB9   Length              0005 (5)\n-01CFBB   Flags               01 (1) 'Modification'\n-01CFBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-01CFC0 PAYLOAD\n-\n-01FF50 DATA DESCRIPTOR       08074B50 (134695760)\n-01FF54 CRC                   826E1CC4 (2188254404)\n-01FF58 Compressed Size       00002F90 (12176)\n-01FF5C Uncompressed Size     00002F90 (12176)\n-\n-01FF60 LOCAL HEADER #32      04034B50 (67324752)\n-01FF64 Extract Zip Spec      14 (20) '2.0'\n-01FF65 Extract OS            00 (0) 'MS-DOS'\n-01FF66 General Purpose Flag  0000 (0)\n-01FF68 Compression Method    0000 (0) 'Stored'\n-01FF6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-01FF6E CRC                   00000000 (0)\n-01FF72 Compressed Size       00000000 (0)\n-01FF76 Uncompressed Size     00000000 (0)\n-01FF7A Filename Length       006E (110)\n-01FF7C Extra Length          0009 (9)\n-01FF7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1FF7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-01FFEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-01FFEE   Length              0005 (5)\n-01FFF0   Flags               01 (1) 'Modification'\n-01FFF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-01FFF5 LOCAL HEADER #33      04034B50 (67324752)\n-01FFF9 Extract Zip Spec      14 (20) '2.0'\n-01FFFA Extract OS            00 (0) 'MS-DOS'\n-01FFFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-01FFFD Compression Method    0000 (0) 'Stored'\n-01FFFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020003 CRC                   00000000 (0)\n-020007 Compressed Size       00000000 (0)\n-02000B Uncompressed Size     00000000 (0)\n-02000F Filename Length       0084 (132)\n-020011 Extra Length          0009 (9)\n-020013 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+018000 DATA DESCRIPTOR       08074B50 (134695760)\n+018004 CRC                   13966CB5 (328625333)\n+018008 Compressed Size       000004A4 (1188)\n+01800C Uncompressed Size     000004A4 (1188)\n+\n+018010 LOCAL HEADER #12      04034B50 (67324752)\n+018014 Extract Zip Spec      14 (20) '2.0'\n+018015 Extract OS            00 (0) 'MS-DOS'\n+018016 General Purpose Flag  0000 (0)\n+018018 Compression Method    0000 (0) 'Stored'\n+01801A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01801E CRC                   00000000 (0)\n+018022 Compressed Size       00000000 (0)\n+018026 Uncompressed Size     00000000 (0)\n+01802A Filename Length       0005 (5)\n+01802C Extra Length          0009 (9)\n+01802E Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x1802E: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+018033 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018035   Length              0005 (5)\n+018037   Flags               01 (1) 'Modification'\n+018038   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01803C LOCAL HEADER #13      04034B50 (67324752)\n+018040 Extract Zip Spec      14 (20) '2.0'\n+018041 Extract OS            00 (0) 'MS-DOS'\n+018042 General Purpose Flag  0000 (0)\n+018044 Compression Method    0000 (0) 'Stored'\n+018046 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01804A CRC                   00000000 (0)\n+01804E Compressed Size       00000000 (0)\n+018052 Uncompressed Size     00000000 (0)\n+018056 Filename Length       0015 (21)\n+018058 Extra Length          0009 (9)\n+01805A Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1805A: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01806F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018071   Length              0005 (5)\n+018073   Flags               01 (1) 'Modification'\n+018074   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+018078 LOCAL HEADER #14      04034B50 (67324752)\n+01807C Extract Zip Spec      14 (20) '2.0'\n+01807D Extract OS            00 (0) 'MS-DOS'\n+01807E General Purpose Flag  0000 (0)\n+018080 Compression Method    0000 (0) 'Stored'\n+018082 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018086 CRC                   00000000 (0)\n+01808A Compressed Size       00000000 (0)\n+01808E Uncompressed Size     00000000 (0)\n+018092 Filename Length       0027 (39)\n+018094 Extra Length          0009 (9)\n+018096 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18096: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0180BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0180BF   Length              0005 (5)\n+0180C1   Flags               01 (1) 'Modification'\n+0180C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0180C6 LOCAL HEADER #15      04034B50 (67324752)\n+0180CA Extract Zip Spec      14 (20) '2.0'\n+0180CB Extract OS            00 (0) 'MS-DOS'\n+0180CC General Purpose Flag  0000 (0)\n+0180CE Compression Method    0000 (0) 'Stored'\n+0180D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0180D4 CRC                   00000000 (0)\n+0180D8 Compressed Size       00000000 (0)\n+0180DC Uncompressed Size     00000000 (0)\n+0180E0 Filename Length       0030 (48)\n+0180E2 Extra Length          0009 (9)\n+0180E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x180E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018114 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018116   Length              0005 (5)\n+018118   Flags               01 (1) 'Modification'\n+018119   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01811D LOCAL HEADER #16      04034B50 (67324752)\n+018121 Extract Zip Spec      14 (20) '2.0'\n+018122 Extract OS            00 (0) 'MS-DOS'\n+018123 General Purpose Flag  0000 (0)\n+018125 Compression Method    0000 (0) 'Stored'\n+018127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01812B CRC                   00000000 (0)\n+01812F Compressed Size       00000000 (0)\n+018133 Uncompressed Size     00000000 (0)\n+018137 Filename Length       0067 (103)\n+018139 Extra Length          0009 (9)\n+01813B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1813B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0181A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0181A4   Length              0005 (5)\n+0181A6   Flags               01 (1) 'Modification'\n+0181A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0181AB LOCAL HEADER #17      04034B50 (67324752)\n+0181AF Extract Zip Spec      14 (20) '2.0'\n+0181B0 Extract OS            00 (0) 'MS-DOS'\n+0181B1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0181B3 Compression Method    0000 (0) 'Stored'\n+0181B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0181B9 CRC                   00000000 (0)\n+0181BD Compressed Size       00000000 (0)\n+0181C1 Uncompressed Size     00000000 (0)\n+0181C5 Filename Length       007D (125)\n+0181C7 Extra Length          0009 (9)\n+0181C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x181C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018246 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018248   Length              0005 (5)\n+01824A   Flags               01 (1) 'Modification'\n+01824B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01824F PAYLOAD\n+\n+018CF1 DATA DESCRIPTOR       08074B50 (134695760)\n+018CF5 CRC                   9CB4EC6B (2629102699)\n+018CF9 Compressed Size       00000AA2 (2722)\n+018CFD Uncompressed Size     00000AA2 (2722)\n+\n+018D01 LOCAL HEADER #18      04034B50 (67324752)\n+018D05 Extract Zip Spec      14 (20) '2.0'\n+018D06 Extract OS            00 (0) 'MS-DOS'\n+018D07 General Purpose Flag  0000 (0)\n+018D09 Compression Method    0000 (0) 'Stored'\n+018D0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018D0F CRC                   00000000 (0)\n+018D13 Compressed Size       00000000 (0)\n+018D17 Uncompressed Size     00000000 (0)\n+018D1B Filename Length       0023 (35)\n+018D1D Extra Length          0009 (9)\n+018D1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18D1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018D42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018D44   Length              0005 (5)\n+018D46   Flags               01 (1) 'Modification'\n+018D47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+018D4B LOCAL HEADER #19      04034B50 (67324752)\n+018D4F Extract Zip Spec      14 (20) '2.0'\n+018D50 Extract OS            00 (0) 'MS-DOS'\n+018D51 General Purpose Flag  0000 (0)\n+018D53 Compression Method    0000 (0) 'Stored'\n+018D55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018D59 CRC                   00000000 (0)\n+018D5D Compressed Size       00000000 (0)\n+018D61 Uncompressed Size     00000000 (0)\n+018D65 Filename Length       002C (44)\n+018D67 Extra Length          0009 (9)\n+018D69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18D69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018D95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018D97   Length              0005 (5)\n+018D99   Flags               01 (1) 'Modification'\n+018D9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+018D9E LOCAL HEADER #20      04034B50 (67324752)\n+018DA2 Extract Zip Spec      14 (20) '2.0'\n+018DA3 Extract OS            00 (0) 'MS-DOS'\n+018DA4 General Purpose Flag  0000 (0)\n+018DA6 Compression Method    0000 (0) 'Stored'\n+018DA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018DAC CRC                   00000000 (0)\n+018DB0 Compressed Size       00000000 (0)\n+018DB4 Uncompressed Size     00000000 (0)\n+018DB8 Filename Length       0058 (88)\n+018DBA Extra Length          0009 (9)\n+018DBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18DBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018E14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018E16   Length              0005 (5)\n+018E18   Flags               01 (1) 'Modification'\n+018E19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+018E1D LOCAL HEADER #21      04034B50 (67324752)\n+018E21 Extract Zip Spec      14 (20) '2.0'\n+018E22 Extract OS            00 (0) 'MS-DOS'\n+018E23 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+018E25 Compression Method    0000 (0) 'Stored'\n+018E27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+018E2B CRC                   00000000 (0)\n+018E2F Compressed Size       00000000 (0)\n+018E33 Uncompressed Size     00000000 (0)\n+018E37 Filename Length       006E (110)\n+018E39 Extra Length          0009 (9)\n+018E3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18E3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+018EA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+018EAB   Length              0005 (5)\n+018EAD   Flags               01 (1) 'Modification'\n+018EAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+018EB2 PAYLOAD\n+\n+019E71 DATA DESCRIPTOR       08074B50 (134695760)\n+019E75 CRC                   445AD7B2 (1146804146)\n+019E79 Compressed Size       00000FBF (4031)\n+019E7D Uncompressed Size     00000FBF (4031)\n+\n+019E81 LOCAL HEADER #22      04034B50 (67324752)\n+019E85 Extract Zip Spec      14 (20) '2.0'\n+019E86 Extract OS            00 (0) 'MS-DOS'\n+019E87 General Purpose Flag  0000 (0)\n+019E89 Compression Method    0000 (0) 'Stored'\n+019E8B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019E8F CRC                   00000000 (0)\n+019E93 Compressed Size       00000000 (0)\n+019E97 Uncompressed Size     00000000 (0)\n+019E9B Filename Length       0058 (88)\n+019E9D Extra Length          0009 (9)\n+019E9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19E9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019EF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019EF9   Length              0005 (5)\n+019EFB   Flags               01 (1) 'Modification'\n+019EFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+019F00 LOCAL HEADER #23      04034B50 (67324752)\n+019F04 Extract Zip Spec      14 (20) '2.0'\n+019F05 Extract OS            00 (0) 'MS-DOS'\n+019F06 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+019F08 Compression Method    0000 (0) 'Stored'\n+019F0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+019F0E CRC                   00000000 (0)\n+019F12 Compressed Size       00000000 (0)\n+019F16 Uncompressed Size     00000000 (0)\n+019F1A Filename Length       006E (110)\n+019F1C Extra Length          0009 (9)\n+019F1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19F1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+019F8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+019F8E   Length              0005 (5)\n+019F90   Flags               01 (1) 'Modification'\n+019F91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+019F95 PAYLOAD\n+\n+01B673 DATA DESCRIPTOR       08074B50 (134695760)\n+01B677 CRC                   A2A96EA2 (2729012898)\n+01B67B Compressed Size       000016DE (5854)\n+01B67F Uncompressed Size     000016DE (5854)\n+\n+01B683 LOCAL HEADER #24      04034B50 (67324752)\n+01B687 Extract Zip Spec      14 (20) '2.0'\n+01B688 Extract OS            00 (0) 'MS-DOS'\n+01B689 General Purpose Flag  0000 (0)\n+01B68B Compression Method    0000 (0) 'Stored'\n+01B68D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B691 CRC                   00000000 (0)\n+01B695 Compressed Size       00000000 (0)\n+01B699 Uncompressed Size     00000000 (0)\n+01B69D Filename Length       002F (47)\n+01B69F Extra Length          0009 (9)\n+01B6A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B6A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B6D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B6D2   Length              0005 (5)\n+01B6D4   Flags               01 (1) 'Modification'\n+01B6D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B6D9 LOCAL HEADER #25      04034B50 (67324752)\n+01B6DD Extract Zip Spec      14 (20) '2.0'\n+01B6DE Extract OS            00 (0) 'MS-DOS'\n+01B6DF General Purpose Flag  0000 (0)\n+01B6E1 Compression Method    0000 (0) 'Stored'\n+01B6E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B6E7 CRC                   00000000 (0)\n+01B6EB Compressed Size       00000000 (0)\n+01B6EF Uncompressed Size     00000000 (0)\n+01B6F3 Filename Length       0038 (56)\n+01B6F5 Extra Length          0009 (9)\n+01B6F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B6F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B72F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B731   Length              0005 (5)\n+01B733   Flags               01 (1) 'Modification'\n+01B734   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B738 LOCAL HEADER #26      04034B50 (67324752)\n+01B73C Extract Zip Spec      14 (20) '2.0'\n+01B73D Extract OS            00 (0) 'MS-DOS'\n+01B73E General Purpose Flag  0000 (0)\n+01B740 Compression Method    0000 (0) 'Stored'\n+01B742 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B746 CRC                   00000000 (0)\n+01B74A Compressed Size       00000000 (0)\n+01B74E Uncompressed Size     00000000 (0)\n+01B752 Filename Length       0068 (104)\n+01B754 Extra Length          0009 (9)\n+01B756 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B756: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B7BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B7C0   Length              0005 (5)\n+01B7C2   Flags               01 (1) 'Modification'\n+01B7C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01B7C7 LOCAL HEADER #27      04034B50 (67324752)\n+01B7CB Extract Zip Spec      14 (20) '2.0'\n+01B7CC Extract OS            00 (0) 'MS-DOS'\n+01B7CD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01B7CF Compression Method    0000 (0) 'Stored'\n+01B7D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01B7D5 CRC                   00000000 (0)\n+01B7D9 Compressed Size       00000000 (0)\n+01B7DD Uncompressed Size     00000000 (0)\n+01B7E1 Filename Length       007E (126)\n+01B7E3 Extra Length          0009 (9)\n+01B7E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B7E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01B863 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01B865   Length              0005 (5)\n+01B867   Flags               01 (1) 'Modification'\n+01B868   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01B86C PAYLOAD\n+\n+01CD7E DATA DESCRIPTOR       08074B50 (134695760)\n+01CD82 CRC                   7416DF2A (1947655978)\n+01CD86 Compressed Size       00001512 (5394)\n+01CD8A Uncompressed Size     00001512 (5394)\n+\n+01CD8E LOCAL HEADER #28      04034B50 (67324752)\n+01CD92 Extract Zip Spec      14 (20) '2.0'\n+01CD93 Extract OS            00 (0) 'MS-DOS'\n+01CD94 General Purpose Flag  0000 (0)\n+01CD96 Compression Method    0000 (0) 'Stored'\n+01CD98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CD9C CRC                   00000000 (0)\n+01CDA0 Compressed Size       00000000 (0)\n+01CDA4 Uncompressed Size     00000000 (0)\n+01CDA8 Filename Length       0022 (34)\n+01CDAA Extra Length          0009 (9)\n+01CDAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CDAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CDCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CDD0   Length              0005 (5)\n+01CDD2   Flags               01 (1) 'Modification'\n+01CDD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CDD7 LOCAL HEADER #29      04034B50 (67324752)\n+01CDDB Extract Zip Spec      14 (20) '2.0'\n+01CDDC Extract OS            00 (0) 'MS-DOS'\n+01CDDD General Purpose Flag  0000 (0)\n+01CDDF Compression Method    0000 (0) 'Stored'\n+01CDE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CDE5 CRC                   00000000 (0)\n+01CDE9 Compressed Size       00000000 (0)\n+01CDED Uncompressed Size     00000000 (0)\n+01CDF1 Filename Length       002B (43)\n+01CDF3 Extra Length          0009 (9)\n+01CDF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CDF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CE20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CE22   Length              0005 (5)\n+01CE24   Flags               01 (1) 'Modification'\n+01CE25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CE29 LOCAL HEADER #30      04034B50 (67324752)\n+01CE2D Extract Zip Spec      14 (20) '2.0'\n+01CE2E Extract OS            00 (0) 'MS-DOS'\n+01CE2F General Purpose Flag  0000 (0)\n+01CE31 Compression Method    0000 (0) 'Stored'\n+01CE33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CE37 CRC                   00000000 (0)\n+01CE3B Compressed Size       00000000 (0)\n+01CE3F Uncompressed Size     00000000 (0)\n+01CE43 Filename Length       0065 (101)\n+01CE45 Extra Length          0009 (9)\n+01CE47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CE47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CEAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CEAE   Length              0005 (5)\n+01CEB0   Flags               01 (1) 'Modification'\n+01CEB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01CEB5 LOCAL HEADER #31      04034B50 (67324752)\n+01CEB9 Extract Zip Spec      14 (20) '2.0'\n+01CEBA Extract OS            00 (0) 'MS-DOS'\n+01CEBB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01CEBD Compression Method    0000 (0) 'Stored'\n+01CEBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01CEC3 CRC                   00000000 (0)\n+01CEC7 Compressed Size       00000000 (0)\n+01CECB Uncompressed Size     00000000 (0)\n+01CECF Filename Length       007B (123)\n+01CED1 Extra Length          0009 (9)\n+01CED3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1CED3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01CF4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01CF50   Length              0005 (5)\n+01CF52   Flags               01 (1) 'Modification'\n+01CF53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+01CF57 PAYLOAD\n+\n+01FEE7 DATA DESCRIPTOR       08074B50 (134695760)\n+01FEEB CRC                   826E1CC4 (2188254404)\n+01FEEF Compressed Size       00002F90 (12176)\n+01FEF3 Uncompressed Size     00002F90 (12176)\n+\n+01FEF7 LOCAL HEADER #32      04034B50 (67324752)\n+01FEFB Extract Zip Spec      14 (20) '2.0'\n+01FEFC Extract OS            00 (0) 'MS-DOS'\n+01FEFD General Purpose Flag  0000 (0)\n+01FEFF Compression Method    0000 (0) 'Stored'\n+01FF01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01FF05 CRC                   00000000 (0)\n+01FF09 Compressed Size       00000000 (0)\n+01FF0D Uncompressed Size     00000000 (0)\n+01FF11 Filename Length       006E (110)\n+01FF13 Extra Length          0009 (9)\n+01FF15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FF15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+01FF83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+01FF85   Length              0005 (5)\n+01FF87   Flags               01 (1) 'Modification'\n+01FF88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+01FF8C LOCAL HEADER #33      04034B50 (67324752)\n+01FF90 Extract Zip Spec      14 (20) '2.0'\n+01FF91 Extract OS            00 (0) 'MS-DOS'\n+01FF92 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+01FF94 Compression Method    0000 (0) 'Stored'\n+01FF96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+01FF9A CRC                   00000000 (0)\n+01FF9E Compressed Size       00000000 (0)\n+01FFA2 Uncompressed Size     00000000 (0)\n+01FFA6 Filename Length       0084 (132)\n+01FFA8 Extra Length          0009 (9)\n+01FFAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x20013: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1FFAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-020097 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020099   Length              0005 (5)\n-02009B   Flags               01 (1) 'Modification'\n-02009C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0200A0 PAYLOAD\n-\n-020A07 DATA DESCRIPTOR       08074B50 (134695760)\n-020A0B CRC                   1BE163AC (467755948)\n-020A0F Compressed Size       00000967 (2407)\n-020A13 Uncompressed Size     00000967 (2407)\n-\n-020A17 LOCAL HEADER #34      04034B50 (67324752)\n-020A1B Extract Zip Spec      14 (20) '2.0'\n-020A1C Extract OS            00 (0) 'MS-DOS'\n-020A1D General Purpose Flag  0000 (0)\n-020A1F Compression Method    0000 (0) 'Stored'\n-020A21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020A25 CRC                   00000000 (0)\n-020A29 Compressed Size       00000000 (0)\n-020A2D Uncompressed Size     00000000 (0)\n-020A31 Filename Length       0068 (104)\n-020A33 Extra Length          0009 (9)\n-020A35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20A35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020A9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020A9F   Length              0005 (5)\n-020AA1   Flags               01 (1) 'Modification'\n-020AA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-020AA6 LOCAL HEADER #35      04034B50 (67324752)\n-020AAA Extract Zip Spec      14 (20) '2.0'\n-020AAB Extract OS            00 (0) 'MS-DOS'\n-020AAC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-020AAE Compression Method    0000 (0) 'Stored'\n-020AB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-020AB4 CRC                   00000000 (0)\n-020AB8 Compressed Size       00000000 (0)\n-020ABC Uncompressed Size     00000000 (0)\n-020AC0 Filename Length       007E (126)\n-020AC2 Extra Length          0009 (9)\n-020AC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20AC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-020B42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-020B44   Length              0005 (5)\n-020B46   Flags               01 (1) 'Modification'\n-020B47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-020B4B PAYLOAD\n-\n-02135A DATA DESCRIPTOR       08074B50 (134695760)\n-02135E CRC                   11DB1110 (299569424)\n-021362 Compressed Size       0000080F (2063)\n-021366 Uncompressed Size     0000080F (2063)\n-\n-02136A LOCAL HEADER #36      04034B50 (67324752)\n-02136E Extract Zip Spec      14 (20) '2.0'\n-02136F Extract OS            00 (0) 'MS-DOS'\n-021370 General Purpose Flag  0000 (0)\n-021372 Compression Method    0000 (0) 'Stored'\n-021374 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021378 CRC                   00000000 (0)\n-02137C Compressed Size       00000000 (0)\n-021380 Uncompressed Size     00000000 (0)\n-021384 Filename Length       0064 (100)\n-021386 Extra Length          0009 (9)\n-021388 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21388: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0213EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0213EE   Length              0005 (5)\n-0213F0   Flags               01 (1) 'Modification'\n-0213F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0213F5 LOCAL HEADER #37      04034B50 (67324752)\n-0213F9 Extract Zip Spec      14 (20) '2.0'\n-0213FA Extract OS            00 (0) 'MS-DOS'\n-0213FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0213FD Compression Method    0000 (0) 'Stored'\n-0213FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-021403 CRC                   00000000 (0)\n-021407 Compressed Size       00000000 (0)\n-02140B Uncompressed Size     00000000 (0)\n-02140F Filename Length       007A (122)\n-021411 Extra Length          0009 (9)\n-021413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02148D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02148F   Length              0005 (5)\n-021491   Flags               01 (1) 'Modification'\n-021492   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-021496 PAYLOAD\n-\n-0220B2 DATA DESCRIPTOR       08074B50 (134695760)\n-0220B6 CRC                   30A69673 (816223859)\n-0220BA Compressed Size       00000C1C (3100)\n-0220BE Uncompressed Size     00000C1C (3100)\n-\n-0220C2 LOCAL HEADER #38      04034B50 (67324752)\n-0220C6 Extract Zip Spec      14 (20) '2.0'\n-0220C7 Extract OS            00 (0) 'MS-DOS'\n-0220C8 General Purpose Flag  0000 (0)\n-0220CA Compression Method    0000 (0) 'Stored'\n-0220CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0220D0 CRC                   00000000 (0)\n-0220D4 Compressed Size       00000000 (0)\n-0220D8 Uncompressed Size     00000000 (0)\n-0220DC Filename Length       006E (110)\n-0220DE Extra Length          0009 (9)\n-0220E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x220E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02214E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022150   Length              0005 (5)\n-022152   Flags               01 (1) 'Modification'\n-022153   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-022157 LOCAL HEADER #39      04034B50 (67324752)\n-02215B Extract Zip Spec      14 (20) '2.0'\n-02215C Extract OS            00 (0) 'MS-DOS'\n-02215D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02215F Compression Method    0000 (0) 'Stored'\n-022161 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-022165 CRC                   00000000 (0)\n-022169 Compressed Size       00000000 (0)\n-02216D Uncompressed Size     00000000 (0)\n-022171 Filename Length       0084 (132)\n-022173 Extra Length          0009 (9)\n-022175 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02002E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020030   Length              0005 (5)\n+020032   Flags               01 (1) 'Modification'\n+020033   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+020037 PAYLOAD\n+\n+02099E DATA DESCRIPTOR       08074B50 (134695760)\n+0209A2 CRC                   1BE163AC (467755948)\n+0209A6 Compressed Size       00000967 (2407)\n+0209AA Uncompressed Size     00000967 (2407)\n+\n+0209AE LOCAL HEADER #34      04034B50 (67324752)\n+0209B2 Extract Zip Spec      14 (20) '2.0'\n+0209B3 Extract OS            00 (0) 'MS-DOS'\n+0209B4 General Purpose Flag  0000 (0)\n+0209B6 Compression Method    0000 (0) 'Stored'\n+0209B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0209BC CRC                   00000000 (0)\n+0209C0 Compressed Size       00000000 (0)\n+0209C4 Uncompressed Size     00000000 (0)\n+0209C8 Filename Length       0068 (104)\n+0209CA Extra Length          0009 (9)\n+0209CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x209CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+020A34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020A36   Length              0005 (5)\n+020A38   Flags               01 (1) 'Modification'\n+020A39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+020A3D LOCAL HEADER #35      04034B50 (67324752)\n+020A41 Extract Zip Spec      14 (20) '2.0'\n+020A42 Extract OS            00 (0) 'MS-DOS'\n+020A43 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+020A45 Compression Method    0000 (0) 'Stored'\n+020A47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+020A4B CRC                   00000000 (0)\n+020A4F Compressed Size       00000000 (0)\n+020A53 Uncompressed Size     00000000 (0)\n+020A57 Filename Length       007E (126)\n+020A59 Extra Length          0009 (9)\n+020A5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20A5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+020AD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+020ADB   Length              0005 (5)\n+020ADD   Flags               01 (1) 'Modification'\n+020ADE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+020AE2 PAYLOAD\n+\n+0212F1 DATA DESCRIPTOR       08074B50 (134695760)\n+0212F5 CRC                   11DB1110 (299569424)\n+0212F9 Compressed Size       0000080F (2063)\n+0212FD Uncompressed Size     0000080F (2063)\n+\n+021301 LOCAL HEADER #36      04034B50 (67324752)\n+021305 Extract Zip Spec      14 (20) '2.0'\n+021306 Extract OS            00 (0) 'MS-DOS'\n+021307 General Purpose Flag  0000 (0)\n+021309 Compression Method    0000 (0) 'Stored'\n+02130B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02130F CRC                   00000000 (0)\n+021313 Compressed Size       00000000 (0)\n+021317 Uncompressed Size     00000000 (0)\n+02131B Filename Length       0064 (100)\n+02131D Extra Length          0009 (9)\n+02131F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2131F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021383 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021385   Length              0005 (5)\n+021387   Flags               01 (1) 'Modification'\n+021388   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02138C LOCAL HEADER #37      04034B50 (67324752)\n+021390 Extract Zip Spec      14 (20) '2.0'\n+021391 Extract OS            00 (0) 'MS-DOS'\n+021392 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+021394 Compression Method    0000 (0) 'Stored'\n+021396 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02139A CRC                   00000000 (0)\n+02139E Compressed Size       00000000 (0)\n+0213A2 Uncompressed Size     00000000 (0)\n+0213A6 Filename Length       007A (122)\n+0213A8 Extra Length          0009 (9)\n+0213AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x213AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+021424 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+021426   Length              0005 (5)\n+021428   Flags               01 (1) 'Modification'\n+021429   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02142D PAYLOAD\n+\n+022049 DATA DESCRIPTOR       08074B50 (134695760)\n+02204D CRC                   30A69673 (816223859)\n+022051 Compressed Size       00000C1C (3100)\n+022055 Uncompressed Size     00000C1C (3100)\n+\n+022059 LOCAL HEADER #38      04034B50 (67324752)\n+02205D Extract Zip Spec      14 (20) '2.0'\n+02205E Extract OS            00 (0) 'MS-DOS'\n+02205F General Purpose Flag  0000 (0)\n+022061 Compression Method    0000 (0) 'Stored'\n+022063 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+022067 CRC                   00000000 (0)\n+02206B Compressed Size       00000000 (0)\n+02206F Uncompressed Size     00000000 (0)\n+022073 Filename Length       006E (110)\n+022075 Extra Length          0009 (9)\n+022077 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22077: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0220E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0220E7   Length              0005 (5)\n+0220E9   Flags               01 (1) 'Modification'\n+0220EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0220EE LOCAL HEADER #39      04034B50 (67324752)\n+0220F2 Extract Zip Spec      14 (20) '2.0'\n+0220F3 Extract OS            00 (0) 'MS-DOS'\n+0220F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0220F6 Compression Method    0000 (0) 'Stored'\n+0220F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0220FC CRC                   00000000 (0)\n+022100 Compressed Size       00000000 (0)\n+022104 Uncompressed Size     00000000 (0)\n+022108 Filename Length       0084 (132)\n+02210A Extra Length          0009 (9)\n+02210C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x22175: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2210C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0221F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0221FB   Length              0005 (5)\n-0221FD   Flags               01 (1) 'Modification'\n-0221FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-022202 PAYLOAD\n-\n-0228D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0228DD CRC                   0C316B32 (204565298)\n-0228E1 Compressed Size       000006D7 (1751)\n-0228E5 Uncompressed Size     000006D7 (1751)\n-\n-0228E9 LOCAL HEADER #40      04034B50 (67324752)\n-0228ED Extract Zip Spec      14 (20) '2.0'\n-0228EE Extract OS            00 (0) 'MS-DOS'\n-0228EF General Purpose Flag  0000 (0)\n-0228F1 Compression Method    0000 (0) 'Stored'\n-0228F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0228F7 CRC                   00000000 (0)\n-0228FB Compressed Size       00000000 (0)\n-0228FF Uncompressed Size     00000000 (0)\n-022903 Filename Length       006A (106)\n-022905 Extra Length          0009 (9)\n-022907 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22907: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-022971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022973   Length              0005 (5)\n-022975   Flags               01 (1) 'Modification'\n-022976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02297A LOCAL HEADER #41      04034B50 (67324752)\n-02297E Extract Zip Spec      14 (20) '2.0'\n-02297F Extract OS            00 (0) 'MS-DOS'\n-022980 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-022982 Compression Method    0000 (0) 'Stored'\n-022984 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-022988 CRC                   00000000 (0)\n-02298C Compressed Size       00000000 (0)\n-022990 Uncompressed Size     00000000 (0)\n-022994 Filename Length       0080 (128)\n-022996 Extra Length          0009 (9)\n-022998 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22998: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-022A18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-022A1A   Length              0005 (5)\n-022A1C   Flags               01 (1) 'Modification'\n-022A1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-022A21 PAYLOAD\n-\n-023D5C DATA DESCRIPTOR       08074B50 (134695760)\n-023D60 CRC                   37BEEC96 (935259286)\n-023D64 Compressed Size       0000133B (4923)\n-023D68 Uncompressed Size     0000133B (4923)\n-\n-023D6C LOCAL HEADER #42      04034B50 (67324752)\n-023D70 Extract Zip Spec      14 (20) '2.0'\n-023D71 Extract OS            00 (0) 'MS-DOS'\n-023D72 General Purpose Flag  0000 (0)\n-023D74 Compression Method    0000 (0) 'Stored'\n-023D76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023D7A CRC                   00000000 (0)\n-023D7E Compressed Size       00000000 (0)\n-023D82 Uncompressed Size     00000000 (0)\n-023D86 Filename Length       0072 (114)\n-023D88 Extra Length          0009 (9)\n-023D8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23D8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-023DFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023DFE   Length              0005 (5)\n-023E00   Flags               01 (1) 'Modification'\n-023E01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-023E05 LOCAL HEADER #43      04034B50 (67324752)\n-023E09 Extract Zip Spec      14 (20) '2.0'\n-023E0A Extract OS            00 (0) 'MS-DOS'\n-023E0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-023E0D Compression Method    0000 (0) 'Stored'\n-023E0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-023E13 CRC                   00000000 (0)\n-023E17 Compressed Size       00000000 (0)\n-023E1B Uncompressed Size     00000000 (0)\n-023E1F Filename Length       0088 (136)\n-023E21 Extra Length          0009 (9)\n-023E23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+022190 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+022192   Length              0005 (5)\n+022194   Flags               01 (1) 'Modification'\n+022195   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+022199 PAYLOAD\n+\n+022870 DATA DESCRIPTOR       08074B50 (134695760)\n+022874 CRC                   0C316B32 (204565298)\n+022878 Compressed Size       000006D7 (1751)\n+02287C Uncompressed Size     000006D7 (1751)\n+\n+022880 LOCAL HEADER #40      04034B50 (67324752)\n+022884 Extract Zip Spec      14 (20) '2.0'\n+022885 Extract OS            00 (0) 'MS-DOS'\n+022886 General Purpose Flag  0000 (0)\n+022888 Compression Method    0000 (0) 'Stored'\n+02288A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02288E CRC                   00000000 (0)\n+022892 Compressed Size       00000000 (0)\n+022896 Uncompressed Size     00000000 (0)\n+02289A Filename Length       006A (106)\n+02289C Extra Length          0009 (9)\n+02289E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2289E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+022908 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02290A   Length              0005 (5)\n+02290C   Flags               01 (1) 'Modification'\n+02290D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+022911 LOCAL HEADER #41      04034B50 (67324752)\n+022915 Extract Zip Spec      14 (20) '2.0'\n+022916 Extract OS            00 (0) 'MS-DOS'\n+022917 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+022919 Compression Method    0000 (0) 'Stored'\n+02291B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02291F CRC                   00000000 (0)\n+022923 Compressed Size       00000000 (0)\n+022927 Uncompressed Size     00000000 (0)\n+02292B Filename Length       0080 (128)\n+02292D Extra Length          0009 (9)\n+02292F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2292F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0229AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0229B1   Length              0005 (5)\n+0229B3   Flags               01 (1) 'Modification'\n+0229B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0229B8 PAYLOAD\n+\n+023CF3 DATA DESCRIPTOR       08074B50 (134695760)\n+023CF7 CRC                   37BEEC96 (935259286)\n+023CFB Compressed Size       0000133B (4923)\n+023CFF Uncompressed Size     0000133B (4923)\n+\n+023D03 LOCAL HEADER #42      04034B50 (67324752)\n+023D07 Extract Zip Spec      14 (20) '2.0'\n+023D08 Extract OS            00 (0) 'MS-DOS'\n+023D09 General Purpose Flag  0000 (0)\n+023D0B Compression Method    0000 (0) 'Stored'\n+023D0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023D11 CRC                   00000000 (0)\n+023D15 Compressed Size       00000000 (0)\n+023D19 Uncompressed Size     00000000 (0)\n+023D1D Filename Length       0072 (114)\n+023D1F Extra Length          0009 (9)\n+023D21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23D21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+023D93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023D95   Length              0005 (5)\n+023D97   Flags               01 (1) 'Modification'\n+023D98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+023D9C LOCAL HEADER #43      04034B50 (67324752)\n+023DA0 Extract Zip Spec      14 (20) '2.0'\n+023DA1 Extract OS            00 (0) 'MS-DOS'\n+023DA2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+023DA4 Compression Method    0000 (0) 'Stored'\n+023DA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+023DAA CRC                   00000000 (0)\n+023DAE Compressed Size       00000000 (0)\n+023DB2 Uncompressed Size     00000000 (0)\n+023DB6 Filename Length       0088 (136)\n+023DB8 Extra Length          0009 (9)\n+023DBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x23E23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x23DBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-023EAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-023EAD   Length              0005 (5)\n-023EAF   Flags               01 (1) 'Modification'\n-023EB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-023EB4 PAYLOAD\n-\n-024600 DATA DESCRIPTOR       08074B50 (134695760)\n-024604 CRC                   D0AE7BE4 (3501095908)\n-024608 Compressed Size       0000074C (1868)\n-02460C Uncompressed Size     0000074C (1868)\n-\n-024610 LOCAL HEADER #44      04034B50 (67324752)\n-024614 Extract Zip Spec      14 (20) '2.0'\n-024615 Extract OS            00 (0) 'MS-DOS'\n-024616 General Purpose Flag  0000 (0)\n-024618 Compression Method    0000 (0) 'Stored'\n-02461A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02461E CRC                   00000000 (0)\n-024622 Compressed Size       00000000 (0)\n-024626 Uncompressed Size     00000000 (0)\n-02462A Filename Length       006E (110)\n-02462C Extra Length          0009 (9)\n-02462E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2462E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02469C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02469E   Length              0005 (5)\n-0246A0   Flags               01 (1) 'Modification'\n-0246A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0246A5 LOCAL HEADER #45      04034B50 (67324752)\n-0246A9 Extract Zip Spec      14 (20) '2.0'\n-0246AA Extract OS            00 (0) 'MS-DOS'\n-0246AB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0246AD Compression Method    0000 (0) 'Stored'\n-0246AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0246B3 CRC                   00000000 (0)\n-0246B7 Compressed Size       00000000 (0)\n-0246BB Uncompressed Size     00000000 (0)\n-0246BF Filename Length       0084 (132)\n-0246C1 Extra Length          0009 (9)\n-0246C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+023E42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+023E44   Length              0005 (5)\n+023E46   Flags               01 (1) 'Modification'\n+023E47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+023E4B PAYLOAD\n+\n+024597 DATA DESCRIPTOR       08074B50 (134695760)\n+02459B CRC                   D0AE7BE4 (3501095908)\n+02459F Compressed Size       0000074C (1868)\n+0245A3 Uncompressed Size     0000074C (1868)\n+\n+0245A7 LOCAL HEADER #44      04034B50 (67324752)\n+0245AB Extract Zip Spec      14 (20) '2.0'\n+0245AC Extract OS            00 (0) 'MS-DOS'\n+0245AD General Purpose Flag  0000 (0)\n+0245AF Compression Method    0000 (0) 'Stored'\n+0245B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0245B5 CRC                   00000000 (0)\n+0245B9 Compressed Size       00000000 (0)\n+0245BD Uncompressed Size     00000000 (0)\n+0245C1 Filename Length       006E (110)\n+0245C3 Extra Length          0009 (9)\n+0245C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x245C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+024633 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+024635   Length              0005 (5)\n+024637   Flags               01 (1) 'Modification'\n+024638   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02463C LOCAL HEADER #45      04034B50 (67324752)\n+024640 Extract Zip Spec      14 (20) '2.0'\n+024641 Extract OS            00 (0) 'MS-DOS'\n+024642 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+024644 Compression Method    0000 (0) 'Stored'\n+024646 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02464A CRC                   00000000 (0)\n+02464E Compressed Size       00000000 (0)\n+024652 Uncompressed Size     00000000 (0)\n+024656 Filename Length       0084 (132)\n+024658 Extra Length          0009 (9)\n+02465A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x246C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2465A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-024747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-024749   Length              0005 (5)\n-02474B   Flags               01 (1) 'Modification'\n-02474C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-024750 PAYLOAD\n-\n-02578C DATA DESCRIPTOR       08074B50 (134695760)\n-025790 CRC                   4C134CE6 (1276333286)\n-025794 Compressed Size       0000103C (4156)\n-025798 Uncompressed Size     0000103C (4156)\n-\n-02579C LOCAL HEADER #46      04034B50 (67324752)\n-0257A0 Extract Zip Spec      14 (20) '2.0'\n-0257A1 Extract OS            00 (0) 'MS-DOS'\n-0257A2 General Purpose Flag  0000 (0)\n-0257A4 Compression Method    0000 (0) 'Stored'\n-0257A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0257AA CRC                   00000000 (0)\n-0257AE Compressed Size       00000000 (0)\n-0257B2 Uncompressed Size     00000000 (0)\n-0257B6 Filename Length       0070 (112)\n-0257B8 Extra Length          0009 (9)\n-0257BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x257BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02582A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02582C   Length              0005 (5)\n-02582E   Flags               01 (1) 'Modification'\n-02582F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-025833 LOCAL HEADER #47      04034B50 (67324752)\n-025837 Extract Zip Spec      14 (20) '2.0'\n-025838 Extract OS            00 (0) 'MS-DOS'\n-025839 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02583B Compression Method    0000 (0) 'Stored'\n-02583D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-025841 CRC                   00000000 (0)\n-025845 Compressed Size       00000000 (0)\n-025849 Uncompressed Size     00000000 (0)\n-02584D Filename Length       0086 (134)\n-02584F Extra Length          0009 (9)\n-025851 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0246DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0246E0   Length              0005 (5)\n+0246E2   Flags               01 (1) 'Modification'\n+0246E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0246E7 PAYLOAD\n+\n+025723 DATA DESCRIPTOR       08074B50 (134695760)\n+025727 CRC                   4C134CE6 (1276333286)\n+02572B Compressed Size       0000103C (4156)\n+02572F Uncompressed Size     0000103C (4156)\n+\n+025733 LOCAL HEADER #46      04034B50 (67324752)\n+025737 Extract Zip Spec      14 (20) '2.0'\n+025738 Extract OS            00 (0) 'MS-DOS'\n+025739 General Purpose Flag  0000 (0)\n+02573B Compression Method    0000 (0) 'Stored'\n+02573D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+025741 CRC                   00000000 (0)\n+025745 Compressed Size       00000000 (0)\n+025749 Uncompressed Size     00000000 (0)\n+02574D Filename Length       0070 (112)\n+02574F Extra Length          0009 (9)\n+025751 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25751: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0257C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0257C3   Length              0005 (5)\n+0257C5   Flags               01 (1) 'Modification'\n+0257C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0257CA LOCAL HEADER #47      04034B50 (67324752)\n+0257CE Extract Zip Spec      14 (20) '2.0'\n+0257CF Extract OS            00 (0) 'MS-DOS'\n+0257D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0257D2 Compression Method    0000 (0) 'Stored'\n+0257D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0257D8 CRC                   00000000 (0)\n+0257DC Compressed Size       00000000 (0)\n+0257E0 Uncompressed Size     00000000 (0)\n+0257E4 Filename Length       0086 (134)\n+0257E6 Extra Length          0009 (9)\n+0257E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x25851: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x257E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0258D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0258D9   Length              0005 (5)\n-0258DB   Flags               01 (1) 'Modification'\n-0258DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0258E0 PAYLOAD\n-\n-026118 DATA DESCRIPTOR       08074B50 (134695760)\n-02611C CRC                   63086228 (1661493800)\n-026120 Compressed Size       00000838 (2104)\n-026124 Uncompressed Size     00000838 (2104)\n-\n-026128 LOCAL HEADER #48      04034B50 (67324752)\n-02612C Extract Zip Spec      14 (20) '2.0'\n-02612D Extract OS            00 (0) 'MS-DOS'\n-02612E General Purpose Flag  0000 (0)\n-026130 Compression Method    0000 (0) 'Stored'\n-026132 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026136 CRC                   00000000 (0)\n-02613A Compressed Size       00000000 (0)\n-02613E Uncompressed Size     00000000 (0)\n-026142 Filename Length       006C (108)\n-026144 Extra Length          0009 (9)\n-026146 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26146: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0261B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0261B4   Length              0005 (5)\n-0261B6   Flags               01 (1) 'Modification'\n-0261B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0261BB LOCAL HEADER #49      04034B50 (67324752)\n-0261BF Extract Zip Spec      14 (20) '2.0'\n-0261C0 Extract OS            00 (0) 'MS-DOS'\n-0261C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0261C3 Compression Method    0000 (0) 'Stored'\n-0261C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0261C9 CRC                   00000000 (0)\n-0261CD Compressed Size       00000000 (0)\n-0261D1 Uncompressed Size     00000000 (0)\n-0261D5 Filename Length       0082 (130)\n-0261D7 Extra Length          0009 (9)\n-0261D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x261D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02625B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02625D   Length              0005 (5)\n-02625F   Flags               01 (1) 'Modification'\n-026260   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-026264 PAYLOAD\n-\n-026EF4 DATA DESCRIPTOR       08074B50 (134695760)\n-026EF8 CRC                   9EF621C1 (2666930625)\n-026EFC Compressed Size       00000C90 (3216)\n-026F00 Uncompressed Size     00000C90 (3216)\n-\n-026F04 LOCAL HEADER #50      04034B50 (67324752)\n-026F08 Extract Zip Spec      14 (20) '2.0'\n-026F09 Extract OS            00 (0) 'MS-DOS'\n-026F0A General Purpose Flag  0000 (0)\n-026F0C Compression Method    0000 (0) 'Stored'\n-026F0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026F12 CRC                   00000000 (0)\n-026F16 Compressed Size       00000000 (0)\n-026F1A Uncompressed Size     00000000 (0)\n-026F1E Filename Length       0054 (84)\n-026F20 Extra Length          0009 (9)\n-026F22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26F22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-026F76 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-026F78   Length              0005 (5)\n-026F7A   Flags               01 (1) 'Modification'\n-026F7B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-026F7F LOCAL HEADER #51      04034B50 (67324752)\n-026F83 Extract Zip Spec      14 (20) '2.0'\n-026F84 Extract OS            00 (0) 'MS-DOS'\n-026F85 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-026F87 Compression Method    0000 (0) 'Stored'\n-026F89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-026F8D CRC                   00000000 (0)\n-026F91 Compressed Size       00000000 (0)\n-026F95 Uncompressed Size     00000000 (0)\n-026F99 Filename Length       006A (106)\n-026F9B Extra Length          0009 (9)\n-026F9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x26F9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027007 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027009   Length              0005 (5)\n-02700B   Flags               01 (1) 'Modification'\n-02700C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-027010 PAYLOAD\n-\n-027F06 DATA DESCRIPTOR       08074B50 (134695760)\n-027F0A CRC                   6BE0FFE8 (1809907688)\n-027F0E Compressed Size       00000EF6 (3830)\n-027F12 Uncompressed Size     00000EF6 (3830)\n-\n-027F16 LOCAL HEADER #52      04034B50 (67324752)\n-027F1A Extract Zip Spec      14 (20) '2.0'\n-027F1B Extract OS            00 (0) 'MS-DOS'\n-027F1C General Purpose Flag  0000 (0)\n-027F1E Compression Method    0000 (0) 'Stored'\n-027F20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027F24 CRC                   00000000 (0)\n-027F28 Compressed Size       00000000 (0)\n-027F2C Uncompressed Size     00000000 (0)\n-027F30 Filename Length       0059 (89)\n-027F32 Extra Length          0009 (9)\n-027F34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27F34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-027F8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-027F8F   Length              0005 (5)\n-027F91   Flags               01 (1) 'Modification'\n-027F92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-027F96 LOCAL HEADER #53      04034B50 (67324752)\n-027F9A Extract Zip Spec      14 (20) '2.0'\n-027F9B Extract OS            00 (0) 'MS-DOS'\n-027F9C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-027F9E Compression Method    0000 (0) 'Stored'\n-027FA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-027FA4 CRC                   00000000 (0)\n-027FA8 Compressed Size       00000000 (0)\n-027FAC Uncompressed Size     00000000 (0)\n-027FB0 Filename Length       006F (111)\n-027FB2 Extra Length          0009 (9)\n-027FB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27FB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-028023 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028025   Length              0005 (5)\n-028027   Flags               01 (1) 'Modification'\n-028028   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02802C PAYLOAD\n-\n-028C70 DATA DESCRIPTOR       08074B50 (134695760)\n-028C74 CRC                   8743913D (2269352253)\n-028C78 Compressed Size       00000C44 (3140)\n-028C7C Uncompressed Size     00000C44 (3140)\n-\n-028C80 LOCAL HEADER #54      04034B50 (67324752)\n-028C84 Extract Zip Spec      14 (20) '2.0'\n-028C85 Extract OS            00 (0) 'MS-DOS'\n-028C86 General Purpose Flag  0000 (0)\n-028C88 Compression Method    0000 (0) 'Stored'\n-028C8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028C8E CRC                   00000000 (0)\n-028C92 Compressed Size       00000000 (0)\n-028C96 Uncompressed Size     00000000 (0)\n-028C9A Filename Length       0074 (116)\n-028C9C Extra Length          0009 (9)\n-028C9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28C9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-028D12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028D14   Length              0005 (5)\n-028D16   Flags               01 (1) 'Modification'\n-028D17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-028D1B LOCAL HEADER #55      04034B50 (67324752)\n-028D1F Extract Zip Spec      14 (20) '2.0'\n-028D20 Extract OS            00 (0) 'MS-DOS'\n-028D21 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-028D23 Compression Method    0000 (0) 'Stored'\n-028D25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-028D29 CRC                   00000000 (0)\n-028D2D Compressed Size       00000000 (0)\n-028D31 Uncompressed Size     00000000 (0)\n-028D35 Filename Length       008A (138)\n-028D37 Extra Length          0009 (9)\n-028D39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02586E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+025870   Length              0005 (5)\n+025872   Flags               01 (1) 'Modification'\n+025873   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+025877 PAYLOAD\n+\n+0260AF DATA DESCRIPTOR       08074B50 (134695760)\n+0260B3 CRC                   63086228 (1661493800)\n+0260B7 Compressed Size       00000838 (2104)\n+0260BB Uncompressed Size     00000838 (2104)\n+\n+0260BF LOCAL HEADER #48      04034B50 (67324752)\n+0260C3 Extract Zip Spec      14 (20) '2.0'\n+0260C4 Extract OS            00 (0) 'MS-DOS'\n+0260C5 General Purpose Flag  0000 (0)\n+0260C7 Compression Method    0000 (0) 'Stored'\n+0260C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0260CD CRC                   00000000 (0)\n+0260D1 Compressed Size       00000000 (0)\n+0260D5 Uncompressed Size     00000000 (0)\n+0260D9 Filename Length       006C (108)\n+0260DB Extra Length          0009 (9)\n+0260DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x260DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026149 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02614B   Length              0005 (5)\n+02614D   Flags               01 (1) 'Modification'\n+02614E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026152 LOCAL HEADER #49      04034B50 (67324752)\n+026156 Extract Zip Spec      14 (20) '2.0'\n+026157 Extract OS            00 (0) 'MS-DOS'\n+026158 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02615A Compression Method    0000 (0) 'Stored'\n+02615C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026160 CRC                   00000000 (0)\n+026164 Compressed Size       00000000 (0)\n+026168 Uncompressed Size     00000000 (0)\n+02616C Filename Length       0082 (130)\n+02616E Extra Length          0009 (9)\n+026170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0261F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0261F4   Length              0005 (5)\n+0261F6   Flags               01 (1) 'Modification'\n+0261F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0261FB PAYLOAD\n+\n+026E8B DATA DESCRIPTOR       08074B50 (134695760)\n+026E8F CRC                   9EF621C1 (2666930625)\n+026E93 Compressed Size       00000C90 (3216)\n+026E97 Uncompressed Size     00000C90 (3216)\n+\n+026E9B LOCAL HEADER #50      04034B50 (67324752)\n+026E9F Extract Zip Spec      14 (20) '2.0'\n+026EA0 Extract OS            00 (0) 'MS-DOS'\n+026EA1 General Purpose Flag  0000 (0)\n+026EA3 Compression Method    0000 (0) 'Stored'\n+026EA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026EA9 CRC                   00000000 (0)\n+026EAD Compressed Size       00000000 (0)\n+026EB1 Uncompressed Size     00000000 (0)\n+026EB5 Filename Length       0054 (84)\n+026EB7 Extra Length          0009 (9)\n+026EB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26EB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026F0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026F0F   Length              0005 (5)\n+026F11   Flags               01 (1) 'Modification'\n+026F12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+026F16 LOCAL HEADER #51      04034B50 (67324752)\n+026F1A Extract Zip Spec      14 (20) '2.0'\n+026F1B Extract OS            00 (0) 'MS-DOS'\n+026F1C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+026F1E Compression Method    0000 (0) 'Stored'\n+026F20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+026F24 CRC                   00000000 (0)\n+026F28 Compressed Size       00000000 (0)\n+026F2C Uncompressed Size     00000000 (0)\n+026F30 Filename Length       006A (106)\n+026F32 Extra Length          0009 (9)\n+026F34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26F34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+026F9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+026FA0   Length              0005 (5)\n+026FA2   Flags               01 (1) 'Modification'\n+026FA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+026FA7 PAYLOAD\n+\n+027E9D DATA DESCRIPTOR       08074B50 (134695760)\n+027EA1 CRC                   6BE0FFE8 (1809907688)\n+027EA5 Compressed Size       00000EF6 (3830)\n+027EA9 Uncompressed Size     00000EF6 (3830)\n+\n+027EAD LOCAL HEADER #52      04034B50 (67324752)\n+027EB1 Extract Zip Spec      14 (20) '2.0'\n+027EB2 Extract OS            00 (0) 'MS-DOS'\n+027EB3 General Purpose Flag  0000 (0)\n+027EB5 Compression Method    0000 (0) 'Stored'\n+027EB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027EBB CRC                   00000000 (0)\n+027EBF Compressed Size       00000000 (0)\n+027EC3 Uncompressed Size     00000000 (0)\n+027EC7 Filename Length       0059 (89)\n+027EC9 Extra Length          0009 (9)\n+027ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027F24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027F26   Length              0005 (5)\n+027F28   Flags               01 (1) 'Modification'\n+027F29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+027F2D LOCAL HEADER #53      04034B50 (67324752)\n+027F31 Extract Zip Spec      14 (20) '2.0'\n+027F32 Extract OS            00 (0) 'MS-DOS'\n+027F33 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+027F35 Compression Method    0000 (0) 'Stored'\n+027F37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+027F3B CRC                   00000000 (0)\n+027F3F Compressed Size       00000000 (0)\n+027F43 Uncompressed Size     00000000 (0)\n+027F47 Filename Length       006F (111)\n+027F49 Extra Length          0009 (9)\n+027F4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27F4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+027FBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+027FBC   Length              0005 (5)\n+027FBE   Flags               01 (1) 'Modification'\n+027FBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+027FC3 PAYLOAD\n+\n+028C07 DATA DESCRIPTOR       08074B50 (134695760)\n+028C0B CRC                   8743913D (2269352253)\n+028C0F Compressed Size       00000C44 (3140)\n+028C13 Uncompressed Size     00000C44 (3140)\n+\n+028C17 LOCAL HEADER #54      04034B50 (67324752)\n+028C1B Extract Zip Spec      14 (20) '2.0'\n+028C1C Extract OS            00 (0) 'MS-DOS'\n+028C1D General Purpose Flag  0000 (0)\n+028C1F Compression Method    0000 (0) 'Stored'\n+028C21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028C25 CRC                   00000000 (0)\n+028C29 Compressed Size       00000000 (0)\n+028C2D Uncompressed Size     00000000 (0)\n+028C31 Filename Length       0074 (116)\n+028C33 Extra Length          0009 (9)\n+028C35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28C35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+028CA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+028CAB   Length              0005 (5)\n+028CAD   Flags               01 (1) 'Modification'\n+028CAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+028CB2 LOCAL HEADER #55      04034B50 (67324752)\n+028CB6 Extract Zip Spec      14 (20) '2.0'\n+028CB7 Extract OS            00 (0) 'MS-DOS'\n+028CB8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+028CBA Compression Method    0000 (0) 'Stored'\n+028CBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+028CC0 CRC                   00000000 (0)\n+028CC4 Compressed Size       00000000 (0)\n+028CC8 Uncompressed Size     00000000 (0)\n+028CCC Filename Length       008A (138)\n+028CCE Extra Length          0009 (9)\n+028CD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x28D39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x28CD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-028DC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-028DC5   Length              0005 (5)\n-028DC7   Flags               01 (1) 'Modification'\n-028DC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-028DCC PAYLOAD\n-\n-0299F5 DATA DESCRIPTOR       08074B50 (134695760)\n-0299F9 CRC                   07A59EC9 (128294601)\n-0299FD Compressed Size       00000C29 (3113)\n-029A01 Uncompressed Size     00000C29 (3113)\n-\n-029A05 LOCAL HEADER #56      04034B50 (67324752)\n-029A09 Extract Zip Spec      14 (20) '2.0'\n-029A0A Extract OS            00 (0) 'MS-DOS'\n-029A0B General Purpose Flag  0000 (0)\n-029A0D Compression Method    0000 (0) 'Stored'\n-029A0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029A13 CRC                   00000000 (0)\n-029A17 Compressed Size       00000000 (0)\n-029A1B Uncompressed Size     00000000 (0)\n-029A1F Filename Length       0024 (36)\n-029A21 Extra Length          0009 (9)\n-029A23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29A23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029A47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029A49   Length              0005 (5)\n-029A4B   Flags               01 (1) 'Modification'\n-029A4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029A50 LOCAL HEADER #57      04034B50 (67324752)\n-029A54 Extract Zip Spec      14 (20) '2.0'\n-029A55 Extract OS            00 (0) 'MS-DOS'\n-029A56 General Purpose Flag  0000 (0)\n-029A58 Compression Method    0000 (0) 'Stored'\n-029A5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029A5E CRC                   00000000 (0)\n-029A62 Compressed Size       00000000 (0)\n-029A66 Uncompressed Size     00000000 (0)\n-029A6A Filename Length       002D (45)\n-029A6C Extra Length          0009 (9)\n-029A6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29A6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029A9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029A9D   Length              0005 (5)\n-029A9F   Flags               01 (1) 'Modification'\n-029AA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029AA4 LOCAL HEADER #58      04034B50 (67324752)\n-029AA8 Extract Zip Spec      14 (20) '2.0'\n-029AA9 Extract OS            00 (0) 'MS-DOS'\n-029AAA General Purpose Flag  0000 (0)\n-029AAC Compression Method    0000 (0) 'Stored'\n-029AAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029AB2 CRC                   00000000 (0)\n-029AB6 Compressed Size       00000000 (0)\n-029ABA Uncompressed Size     00000000 (0)\n-029ABE Filename Length       006E (110)\n-029AC0 Extra Length          0009 (9)\n-029AC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29AC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-029B30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029B32   Length              0005 (5)\n-029B34   Flags               01 (1) 'Modification'\n-029B35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-029B39 LOCAL HEADER #59      04034B50 (67324752)\n-029B3D Extract Zip Spec      14 (20) '2.0'\n-029B3E Extract OS            00 (0) 'MS-DOS'\n-029B3F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-029B41 Compression Method    0000 (0) 'Stored'\n-029B43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-029B47 CRC                   00000000 (0)\n-029B4B Compressed Size       00000000 (0)\n-029B4F Uncompressed Size     00000000 (0)\n-029B53 Filename Length       0084 (132)\n-029B55 Extra Length          0009 (9)\n-029B57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+028D5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+028D5C   Length              0005 (5)\n+028D5E   Flags               01 (1) 'Modification'\n+028D5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+028D63 PAYLOAD\n+\n+02998C DATA DESCRIPTOR       08074B50 (134695760)\n+029990 CRC                   07A59EC9 (128294601)\n+029994 Compressed Size       00000C29 (3113)\n+029998 Uncompressed Size     00000C29 (3113)\n+\n+02999C LOCAL HEADER #56      04034B50 (67324752)\n+0299A0 Extract Zip Spec      14 (20) '2.0'\n+0299A1 Extract OS            00 (0) 'MS-DOS'\n+0299A2 General Purpose Flag  0000 (0)\n+0299A4 Compression Method    0000 (0) 'Stored'\n+0299A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0299AA CRC                   00000000 (0)\n+0299AE Compressed Size       00000000 (0)\n+0299B2 Uncompressed Size     00000000 (0)\n+0299B6 Filename Length       0024 (36)\n+0299B8 Extra Length          0009 (9)\n+0299BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x299BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0299DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0299E0   Length              0005 (5)\n+0299E2   Flags               01 (1) 'Modification'\n+0299E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0299E7 LOCAL HEADER #57      04034B50 (67324752)\n+0299EB Extract Zip Spec      14 (20) '2.0'\n+0299EC Extract OS            00 (0) 'MS-DOS'\n+0299ED General Purpose Flag  0000 (0)\n+0299EF Compression Method    0000 (0) 'Stored'\n+0299F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0299F5 CRC                   00000000 (0)\n+0299F9 Compressed Size       00000000 (0)\n+0299FD Uncompressed Size     00000000 (0)\n+029A01 Filename Length       002D (45)\n+029A03 Extra Length          0009 (9)\n+029A05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29A05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029A32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029A34   Length              0005 (5)\n+029A36   Flags               01 (1) 'Modification'\n+029A37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029A3B LOCAL HEADER #58      04034B50 (67324752)\n+029A3F Extract Zip Spec      14 (20) '2.0'\n+029A40 Extract OS            00 (0) 'MS-DOS'\n+029A41 General Purpose Flag  0000 (0)\n+029A43 Compression Method    0000 (0) 'Stored'\n+029A45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029A49 CRC                   00000000 (0)\n+029A4D Compressed Size       00000000 (0)\n+029A51 Uncompressed Size     00000000 (0)\n+029A55 Filename Length       006E (110)\n+029A57 Extra Length          0009 (9)\n+029A59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29A59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+029AC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029AC9   Length              0005 (5)\n+029ACB   Flags               01 (1) 'Modification'\n+029ACC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+029AD0 LOCAL HEADER #59      04034B50 (67324752)\n+029AD4 Extract Zip Spec      14 (20) '2.0'\n+029AD5 Extract OS            00 (0) 'MS-DOS'\n+029AD6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+029AD8 Compression Method    0000 (0) 'Stored'\n+029ADA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+029ADE CRC                   00000000 (0)\n+029AE2 Compressed Size       00000000 (0)\n+029AE6 Uncompressed Size     00000000 (0)\n+029AEA Filename Length       0084 (132)\n+029AEC Extra Length          0009 (9)\n+029AEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x29B57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29AEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-029BDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-029BDD   Length              0005 (5)\n-029BDF   Flags               01 (1) 'Modification'\n-029BE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-029BE4 PAYLOAD\n-\n-02AA2A DATA DESCRIPTOR       08074B50 (134695760)\n-02AA2E CRC                   63D24DDE (1674726878)\n-02AA32 Compressed Size       00000E46 (3654)\n-02AA36 Uncompressed Size     00000E46 (3654)\n-\n-02AA3A LOCAL HEADER #60      04034B50 (67324752)\n-02AA3E Extract Zip Spec      14 (20) '2.0'\n-02AA3F Extract OS            00 (0) 'MS-DOS'\n-02AA40 General Purpose Flag  0000 (0)\n-02AA42 Compression Method    0000 (0) 'Stored'\n-02AA44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AA48 CRC                   00000000 (0)\n-02AA4C Compressed Size       00000000 (0)\n-02AA50 Uncompressed Size     00000000 (0)\n-02AA54 Filename Length       0075 (117)\n-02AA56 Extra Length          0009 (9)\n-02AA58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2AA58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02AACD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02AACF   Length              0005 (5)\n-02AAD1   Flags               01 (1) 'Modification'\n-02AAD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02AAD6 LOCAL HEADER #61      04034B50 (67324752)\n-02AADA Extract Zip Spec      14 (20) '2.0'\n-02AADB Extract OS            00 (0) 'MS-DOS'\n-02AADC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02AADE Compression Method    0000 (0) 'Stored'\n-02AAE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02AAE4 CRC                   00000000 (0)\n-02AAE8 Compressed Size       00000000 (0)\n-02AAEC Uncompressed Size     00000000 (0)\n-02AAF0 Filename Length       008B (139)\n-02AAF2 Extra Length          0009 (9)\n-02AAF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+029B72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+029B74   Length              0005 (5)\n+029B76   Flags               01 (1) 'Modification'\n+029B77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+029B7B PAYLOAD\n+\n+02A9C1 DATA DESCRIPTOR       08074B50 (134695760)\n+02A9C5 CRC                   63D24DDE (1674726878)\n+02A9C9 Compressed Size       00000E46 (3654)\n+02A9CD Uncompressed Size     00000E46 (3654)\n+\n+02A9D1 LOCAL HEADER #60      04034B50 (67324752)\n+02A9D5 Extract Zip Spec      14 (20) '2.0'\n+02A9D6 Extract OS            00 (0) 'MS-DOS'\n+02A9D7 General Purpose Flag  0000 (0)\n+02A9D9 Compression Method    0000 (0) 'Stored'\n+02A9DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02A9DF CRC                   00000000 (0)\n+02A9E3 Compressed Size       00000000 (0)\n+02A9E7 Uncompressed Size     00000000 (0)\n+02A9EB Filename Length       0075 (117)\n+02A9ED Extra Length          0009 (9)\n+02A9EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2A9EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02AA64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02AA66   Length              0005 (5)\n+02AA68   Flags               01 (1) 'Modification'\n+02AA69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02AA6D LOCAL HEADER #61      04034B50 (67324752)\n+02AA71 Extract Zip Spec      14 (20) '2.0'\n+02AA72 Extract OS            00 (0) 'MS-DOS'\n+02AA73 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02AA75 Compression Method    0000 (0) 'Stored'\n+02AA77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02AA7B CRC                   00000000 (0)\n+02AA7F Compressed Size       00000000 (0)\n+02AA83 Uncompressed Size     00000000 (0)\n+02AA87 Filename Length       008B (139)\n+02AA89 Extra Length          0009 (9)\n+02AA8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x2AAF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2AA8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02AB7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02AB81   Length              0005 (5)\n-02AB83   Flags               01 (1) 'Modification'\n-02AB84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02AB88 PAYLOAD\n-\n-02B410 DATA DESCRIPTOR       08074B50 (134695760)\n-02B414 CRC                   2E17013D (773259581)\n-02B418 Compressed Size       00000888 (2184)\n-02B41C Uncompressed Size     00000888 (2184)\n-\n-02B420 LOCAL HEADER #62      04034B50 (67324752)\n-02B424 Extract Zip Spec      14 (20) '2.0'\n-02B425 Extract OS            00 (0) 'MS-DOS'\n-02B426 General Purpose Flag  0000 (0)\n-02B428 Compression Method    0000 (0) 'Stored'\n-02B42A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B42E CRC                   00000000 (0)\n-02B432 Compressed Size       00000000 (0)\n-02B436 Uncompressed Size     00000000 (0)\n-02B43A Filename Length       0022 (34)\n-02B43C Extra Length          0009 (9)\n-02B43E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B43E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B460 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B462   Length              0005 (5)\n-02B464   Flags               01 (1) 'Modification'\n-02B465   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B469 LOCAL HEADER #63      04034B50 (67324752)\n-02B46D Extract Zip Spec      14 (20) '2.0'\n-02B46E Extract OS            00 (0) 'MS-DOS'\n-02B46F General Purpose Flag  0000 (0)\n-02B471 Compression Method    0000 (0) 'Stored'\n-02B473 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B477 CRC                   00000000 (0)\n-02B47B Compressed Size       00000000 (0)\n-02B47F Uncompressed Size     00000000 (0)\n-02B483 Filename Length       002B (43)\n-02B485 Extra Length          0009 (9)\n-02B487 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B487: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B4B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B4B4   Length              0005 (5)\n-02B4B6   Flags               01 (1) 'Modification'\n-02B4B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B4BB LOCAL HEADER #64      04034B50 (67324752)\n-02B4BF Extract Zip Spec      14 (20) '2.0'\n-02B4C0 Extract OS            00 (0) 'MS-DOS'\n-02B4C1 General Purpose Flag  0000 (0)\n-02B4C3 Compression Method    0000 (0) 'Stored'\n-02B4C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B4C9 CRC                   00000000 (0)\n-02B4CD Compressed Size       00000000 (0)\n-02B4D1 Uncompressed Size     00000000 (0)\n-02B4D5 Filename Length       0057 (87)\n-02B4D7 Extra Length          0009 (9)\n-02B4D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B4D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B530 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B532   Length              0005 (5)\n-02B534   Flags               01 (1) 'Modification'\n-02B535   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02B539 LOCAL HEADER #65      04034B50 (67324752)\n-02B53D Extract Zip Spec      14 (20) '2.0'\n-02B53E Extract OS            00 (0) 'MS-DOS'\n-02B53F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02B541 Compression Method    0000 (0) 'Stored'\n-02B543 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02B547 CRC                   00000000 (0)\n-02B54B Compressed Size       00000000 (0)\n-02B54F Uncompressed Size     00000000 (0)\n-02B553 Filename Length       006D (109)\n-02B555 Extra Length          0009 (9)\n-02B557 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B557: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02B5C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02B5C6   Length              0005 (5)\n-02B5C8   Flags               01 (1) 'Modification'\n-02B5C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02B5CD PAYLOAD\n-\n-02BCD8 DATA DESCRIPTOR       08074B50 (134695760)\n-02BCDC CRC                   C1E5A225 (3253051941)\n-02BCE0 Compressed Size       0000070B (1803)\n-02BCE4 Uncompressed Size     0000070B (1803)\n-\n-02BCE8 LOCAL HEADER #66      04034B50 (67324752)\n-02BCEC Extract Zip Spec      14 (20) '2.0'\n-02BCED Extract OS            00 (0) 'MS-DOS'\n-02BCEE General Purpose Flag  0000 (0)\n-02BCF0 Compression Method    0000 (0) 'Stored'\n-02BCF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BCF6 CRC                   00000000 (0)\n-02BCFA Compressed Size       00000000 (0)\n-02BCFE Uncompressed Size     00000000 (0)\n-02BD02 Filename Length       0056 (86)\n-02BD04 Extra Length          0009 (9)\n-02BD06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BD06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BD5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BD5E   Length              0005 (5)\n-02BD60   Flags               01 (1) 'Modification'\n-02BD61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02BD65 LOCAL HEADER #67      04034B50 (67324752)\n-02BD69 Extract Zip Spec      14 (20) '2.0'\n-02BD6A Extract OS            00 (0) 'MS-DOS'\n-02BD6B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02BD6D Compression Method    0000 (0) 'Stored'\n-02BD6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02BD73 CRC                   00000000 (0)\n-02BD77 Compressed Size       00000000 (0)\n-02BD7B Uncompressed Size     00000000 (0)\n-02BD7F Filename Length       006C (108)\n-02BD81 Extra Length          0009 (9)\n-02BD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2BD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02BDEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02BDF1   Length              0005 (5)\n-02BDF3   Flags               01 (1) 'Modification'\n-02BDF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02BDF8 PAYLOAD\n-\n-02C445 DATA DESCRIPTOR       08074B50 (134695760)\n-02C449 CRC                   8950733E (2303750974)\n-02C44D Compressed Size       0000064D (1613)\n-02C451 Uncompressed Size     0000064D (1613)\n-\n-02C455 LOCAL HEADER #68      04034B50 (67324752)\n-02C459 Extract Zip Spec      14 (20) '2.0'\n-02C45A Extract OS            00 (0) 'MS-DOS'\n-02C45B General Purpose Flag  0000 (0)\n-02C45D Compression Method    0000 (0) 'Stored'\n-02C45F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C463 CRC                   00000000 (0)\n-02C467 Compressed Size       00000000 (0)\n-02C46B Uncompressed Size     00000000 (0)\n-02C46F Filename Length       0055 (85)\n-02C471 Extra Length          0009 (9)\n-02C473 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C473: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C4C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C4CA   Length              0005 (5)\n-02C4CC   Flags               01 (1) 'Modification'\n-02C4CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02C4D1 LOCAL HEADER #69      04034B50 (67324752)\n-02C4D5 Extract Zip Spec      14 (20) '2.0'\n-02C4D6 Extract OS            00 (0) 'MS-DOS'\n-02C4D7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02C4D9 Compression Method    0000 (0) 'Stored'\n-02C4DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02C4DF CRC                   00000000 (0)\n-02C4E3 Compressed Size       00000000 (0)\n-02C4E7 Uncompressed Size     00000000 (0)\n-02C4EB Filename Length       006B (107)\n-02C4ED Extra Length          0009 (9)\n-02C4EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2C4EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02C55A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02C55C   Length              0005 (5)\n-02C55E   Flags               01 (1) 'Modification'\n-02C55F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02C563 PAYLOAD\n-\n-02CBA6 DATA DESCRIPTOR       08074B50 (134695760)\n-02CBAA CRC                   A0157ABE (2685762238)\n-02CBAE Compressed Size       00000643 (1603)\n-02CBB2 Uncompressed Size     00000643 (1603)\n-\n-02CBB6 LOCAL HEADER #70      04034B50 (67324752)\n-02CBBA Extract Zip Spec      14 (20) '2.0'\n-02CBBB Extract OS            00 (0) 'MS-DOS'\n-02CBBC General Purpose Flag  0000 (0)\n-02CBBE Compression Method    0000 (0) 'Stored'\n-02CBC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CBC4 CRC                   00000000 (0)\n-02CBC8 Compressed Size       00000000 (0)\n-02CBCC Uncompressed Size     00000000 (0)\n-02CBD0 Filename Length       002B (43)\n-02CBD2 Extra Length          0009 (9)\n-02CBD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CBD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CBFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CC01   Length              0005 (5)\n-02CC03   Flags               01 (1) 'Modification'\n-02CC04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CC08 LOCAL HEADER #71      04034B50 (67324752)\n-02CC0C Extract Zip Spec      14 (20) '2.0'\n-02CC0D Extract OS            00 (0) 'MS-DOS'\n-02CC0E General Purpose Flag  0000 (0)\n-02CC10 Compression Method    0000 (0) 'Stored'\n-02CC12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CC16 CRC                   00000000 (0)\n-02CC1A Compressed Size       00000000 (0)\n-02CC1E Uncompressed Size     00000000 (0)\n-02CC22 Filename Length       0034 (52)\n-02CC24 Extra Length          0009 (9)\n-02CC26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CC26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CC5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CC5C   Length              0005 (5)\n-02CC5E   Flags               01 (1) 'Modification'\n-02CC5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CC63 LOCAL HEADER #72      04034B50 (67324752)\n-02CC67 Extract Zip Spec      14 (20) '2.0'\n-02CC68 Extract OS            00 (0) 'MS-DOS'\n-02CC69 General Purpose Flag  0000 (0)\n-02CC6B Compression Method    0000 (0) 'Stored'\n-02CC6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CC71 CRC                   00000000 (0)\n-02CC75 Compressed Size       00000000 (0)\n-02CC79 Uncompressed Size     00000000 (0)\n-02CC7D Filename Length       007B (123)\n-02CC7F Extra Length          0009 (9)\n-02CC81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CC81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02CCFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CCFE   Length              0005 (5)\n-02CD00   Flags               01 (1) 'Modification'\n-02CD01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02CD05 LOCAL HEADER #73      04034B50 (67324752)\n-02CD09 Extract Zip Spec      14 (20) '2.0'\n-02CD0A Extract OS            00 (0) 'MS-DOS'\n-02CD0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02CD0D Compression Method    0000 (0) 'Stored'\n-02CD0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02CD13 CRC                   00000000 (0)\n-02CD17 Compressed Size       00000000 (0)\n-02CD1B Uncompressed Size     00000000 (0)\n-02CD1F Filename Length       0091 (145)\n-02CD21 Extra Length          0009 (9)\n-02CD23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02AB16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02AB18   Length              0005 (5)\n+02AB1A   Flags               01 (1) 'Modification'\n+02AB1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02AB1F PAYLOAD\n+\n+02B3A7 DATA DESCRIPTOR       08074B50 (134695760)\n+02B3AB CRC                   2E17013D (773259581)\n+02B3AF Compressed Size       00000888 (2184)\n+02B3B3 Uncompressed Size     00000888 (2184)\n+\n+02B3B7 LOCAL HEADER #62      04034B50 (67324752)\n+02B3BB Extract Zip Spec      14 (20) '2.0'\n+02B3BC Extract OS            00 (0) 'MS-DOS'\n+02B3BD General Purpose Flag  0000 (0)\n+02B3BF Compression Method    0000 (0) 'Stored'\n+02B3C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B3C5 CRC                   00000000 (0)\n+02B3C9 Compressed Size       00000000 (0)\n+02B3CD Uncompressed Size     00000000 (0)\n+02B3D1 Filename Length       0022 (34)\n+02B3D3 Extra Length          0009 (9)\n+02B3D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B3D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B3F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B3F9   Length              0005 (5)\n+02B3FB   Flags               01 (1) 'Modification'\n+02B3FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B400 LOCAL HEADER #63      04034B50 (67324752)\n+02B404 Extract Zip Spec      14 (20) '2.0'\n+02B405 Extract OS            00 (0) 'MS-DOS'\n+02B406 General Purpose Flag  0000 (0)\n+02B408 Compression Method    0000 (0) 'Stored'\n+02B40A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B40E CRC                   00000000 (0)\n+02B412 Compressed Size       00000000 (0)\n+02B416 Uncompressed Size     00000000 (0)\n+02B41A Filename Length       002B (43)\n+02B41C Extra Length          0009 (9)\n+02B41E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B41E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B449 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B44B   Length              0005 (5)\n+02B44D   Flags               01 (1) 'Modification'\n+02B44E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B452 LOCAL HEADER #64      04034B50 (67324752)\n+02B456 Extract Zip Spec      14 (20) '2.0'\n+02B457 Extract OS            00 (0) 'MS-DOS'\n+02B458 General Purpose Flag  0000 (0)\n+02B45A Compression Method    0000 (0) 'Stored'\n+02B45C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B460 CRC                   00000000 (0)\n+02B464 Compressed Size       00000000 (0)\n+02B468 Uncompressed Size     00000000 (0)\n+02B46C Filename Length       0057 (87)\n+02B46E Extra Length          0009 (9)\n+02B470 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B470: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B4C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B4C9   Length              0005 (5)\n+02B4CB   Flags               01 (1) 'Modification'\n+02B4CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02B4D0 LOCAL HEADER #65      04034B50 (67324752)\n+02B4D4 Extract Zip Spec      14 (20) '2.0'\n+02B4D5 Extract OS            00 (0) 'MS-DOS'\n+02B4D6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02B4D8 Compression Method    0000 (0) 'Stored'\n+02B4DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02B4DE CRC                   00000000 (0)\n+02B4E2 Compressed Size       00000000 (0)\n+02B4E6 Uncompressed Size     00000000 (0)\n+02B4EA Filename Length       006D (109)\n+02B4EC Extra Length          0009 (9)\n+02B4EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B4EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02B55B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02B55D   Length              0005 (5)\n+02B55F   Flags               01 (1) 'Modification'\n+02B560   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02B564 PAYLOAD\n+\n+02BC6F DATA DESCRIPTOR       08074B50 (134695760)\n+02BC73 CRC                   C1E5A225 (3253051941)\n+02BC77 Compressed Size       0000070B (1803)\n+02BC7B Uncompressed Size     0000070B (1803)\n+\n+02BC7F LOCAL HEADER #66      04034B50 (67324752)\n+02BC83 Extract Zip Spec      14 (20) '2.0'\n+02BC84 Extract OS            00 (0) 'MS-DOS'\n+02BC85 General Purpose Flag  0000 (0)\n+02BC87 Compression Method    0000 (0) 'Stored'\n+02BC89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02BC8D CRC                   00000000 (0)\n+02BC91 Compressed Size       00000000 (0)\n+02BC95 Uncompressed Size     00000000 (0)\n+02BC99 Filename Length       0056 (86)\n+02BC9B Extra Length          0009 (9)\n+02BC9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2BC9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02BCF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02BCF5   Length              0005 (5)\n+02BCF7   Flags               01 (1) 'Modification'\n+02BCF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02BCFC LOCAL HEADER #67      04034B50 (67324752)\n+02BD00 Extract Zip Spec      14 (20) '2.0'\n+02BD01 Extract OS            00 (0) 'MS-DOS'\n+02BD02 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02BD04 Compression Method    0000 (0) 'Stored'\n+02BD06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02BD0A CRC                   00000000 (0)\n+02BD0E Compressed Size       00000000 (0)\n+02BD12 Uncompressed Size     00000000 (0)\n+02BD16 Filename Length       006C (108)\n+02BD18 Extra Length          0009 (9)\n+02BD1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2BD1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02BD86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02BD88   Length              0005 (5)\n+02BD8A   Flags               01 (1) 'Modification'\n+02BD8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02BD8F PAYLOAD\n+\n+02C3DC DATA DESCRIPTOR       08074B50 (134695760)\n+02C3E0 CRC                   8950733E (2303750974)\n+02C3E4 Compressed Size       0000064D (1613)\n+02C3E8 Uncompressed Size     0000064D (1613)\n+\n+02C3EC LOCAL HEADER #68      04034B50 (67324752)\n+02C3F0 Extract Zip Spec      14 (20) '2.0'\n+02C3F1 Extract OS            00 (0) 'MS-DOS'\n+02C3F2 General Purpose Flag  0000 (0)\n+02C3F4 Compression Method    0000 (0) 'Stored'\n+02C3F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C3FA CRC                   00000000 (0)\n+02C3FE Compressed Size       00000000 (0)\n+02C402 Uncompressed Size     00000000 (0)\n+02C406 Filename Length       0055 (85)\n+02C408 Extra Length          0009 (9)\n+02C40A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C40A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C45F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C461   Length              0005 (5)\n+02C463   Flags               01 (1) 'Modification'\n+02C464   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02C468 LOCAL HEADER #69      04034B50 (67324752)\n+02C46C Extract Zip Spec      14 (20) '2.0'\n+02C46D Extract OS            00 (0) 'MS-DOS'\n+02C46E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02C470 Compression Method    0000 (0) 'Stored'\n+02C472 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02C476 CRC                   00000000 (0)\n+02C47A Compressed Size       00000000 (0)\n+02C47E Uncompressed Size     00000000 (0)\n+02C482 Filename Length       006B (107)\n+02C484 Extra Length          0009 (9)\n+02C486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02C4F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02C4F3   Length              0005 (5)\n+02C4F5   Flags               01 (1) 'Modification'\n+02C4F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02C4FA PAYLOAD\n+\n+02CB3D DATA DESCRIPTOR       08074B50 (134695760)\n+02CB41 CRC                   A0157ABE (2685762238)\n+02CB45 Compressed Size       00000643 (1603)\n+02CB49 Uncompressed Size     00000643 (1603)\n+\n+02CB4D LOCAL HEADER #70      04034B50 (67324752)\n+02CB51 Extract Zip Spec      14 (20) '2.0'\n+02CB52 Extract OS            00 (0) 'MS-DOS'\n+02CB53 General Purpose Flag  0000 (0)\n+02CB55 Compression Method    0000 (0) 'Stored'\n+02CB57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CB5B CRC                   00000000 (0)\n+02CB5F Compressed Size       00000000 (0)\n+02CB63 Uncompressed Size     00000000 (0)\n+02CB67 Filename Length       002B (43)\n+02CB69 Extra Length          0009 (9)\n+02CB6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CB6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CB96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CB98   Length              0005 (5)\n+02CB9A   Flags               01 (1) 'Modification'\n+02CB9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CB9F LOCAL HEADER #71      04034B50 (67324752)\n+02CBA3 Extract Zip Spec      14 (20) '2.0'\n+02CBA4 Extract OS            00 (0) 'MS-DOS'\n+02CBA5 General Purpose Flag  0000 (0)\n+02CBA7 Compression Method    0000 (0) 'Stored'\n+02CBA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CBAD CRC                   00000000 (0)\n+02CBB1 Compressed Size       00000000 (0)\n+02CBB5 Uncompressed Size     00000000 (0)\n+02CBB9 Filename Length       0034 (52)\n+02CBBB Extra Length          0009 (9)\n+02CBBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CBBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CBF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CBF3   Length              0005 (5)\n+02CBF5   Flags               01 (1) 'Modification'\n+02CBF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CBFA LOCAL HEADER #72      04034B50 (67324752)\n+02CBFE Extract Zip Spec      14 (20) '2.0'\n+02CBFF Extract OS            00 (0) 'MS-DOS'\n+02CC00 General Purpose Flag  0000 (0)\n+02CC02 Compression Method    0000 (0) 'Stored'\n+02CC04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CC08 CRC                   00000000 (0)\n+02CC0C Compressed Size       00000000 (0)\n+02CC10 Uncompressed Size     00000000 (0)\n+02CC14 Filename Length       007B (123)\n+02CC16 Extra Length          0009 (9)\n+02CC18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CC18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02CC93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CC95   Length              0005 (5)\n+02CC97   Flags               01 (1) 'Modification'\n+02CC98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02CC9C LOCAL HEADER #73      04034B50 (67324752)\n+02CCA0 Extract Zip Spec      14 (20) '2.0'\n+02CCA1 Extract OS            00 (0) 'MS-DOS'\n+02CCA2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02CCA4 Compression Method    0000 (0) 'Stored'\n+02CCA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02CCAA CRC                   00000000 (0)\n+02CCAE Compressed Size       00000000 (0)\n+02CCB2 Uncompressed Size     00000000 (0)\n+02CCB6 Filename Length       0091 (145)\n+02CCB8 Extra Length          0009 (9)\n+02CCBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2CD23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2CCBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02CDB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02CDB6   Length              0005 (5)\n-02CDB8   Flags               01 (1) 'Modification'\n-02CDB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02CDBD PAYLOAD\n-\n-02D8D2 DATA DESCRIPTOR       08074B50 (134695760)\n-02D8D6 CRC                   164EC61D (374261277)\n-02D8DA Compressed Size       00000B15 (2837)\n-02D8DE Uncompressed Size     00000B15 (2837)\n-\n-02D8E2 LOCAL HEADER #74      04034B50 (67324752)\n-02D8E6 Extract Zip Spec      14 (20) '2.0'\n-02D8E7 Extract OS            00 (0) 'MS-DOS'\n-02D8E8 General Purpose Flag  0000 (0)\n-02D8EA Compression Method    0000 (0) 'Stored'\n-02D8EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D8F0 CRC                   00000000 (0)\n-02D8F4 Compressed Size       00000000 (0)\n-02D8F8 Uncompressed Size     00000000 (0)\n-02D8FC Filename Length       0025 (37)\n-02D8FE Extra Length          0009 (9)\n-02D900 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D900: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D925 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D927   Length              0005 (5)\n-02D929   Flags               01 (1) 'Modification'\n-02D92A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02D92E LOCAL HEADER #75      04034B50 (67324752)\n-02D932 Extract Zip Spec      14 (20) '2.0'\n-02D933 Extract OS            00 (0) 'MS-DOS'\n-02D934 General Purpose Flag  0000 (0)\n-02D936 Compression Method    0000 (0) 'Stored'\n-02D938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D93C CRC                   00000000 (0)\n-02D940 Compressed Size       00000000 (0)\n-02D944 Uncompressed Size     00000000 (0)\n-02D948 Filename Length       002E (46)\n-02D94A Extra Length          0009 (9)\n-02D94C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D94C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02D97A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02D97C   Length              0005 (5)\n-02D97E   Flags               01 (1) 'Modification'\n-02D97F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02D983 LOCAL HEADER #76      04034B50 (67324752)\n-02D987 Extract Zip Spec      14 (20) '2.0'\n-02D988 Extract OS            00 (0) 'MS-DOS'\n-02D989 General Purpose Flag  0000 (0)\n-02D98B Compression Method    0000 (0) 'Stored'\n-02D98D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02D991 CRC                   00000000 (0)\n-02D995 Compressed Size       00000000 (0)\n-02D999 Uncompressed Size     00000000 (0)\n-02D99D Filename Length       005F (95)\n-02D99F Extra Length          0009 (9)\n-02D9A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D9A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DA00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DA02   Length              0005 (5)\n-02DA04   Flags               01 (1) 'Modification'\n-02DA05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02DA09 LOCAL HEADER #77      04034B50 (67324752)\n-02DA0D Extract Zip Spec      14 (20) '2.0'\n-02DA0E Extract OS            00 (0) 'MS-DOS'\n-02DA0F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02DA11 Compression Method    0000 (0) 'Stored'\n-02DA13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02DA17 CRC                   00000000 (0)\n-02DA1B Compressed Size       00000000 (0)\n-02DA1F Uncompressed Size     00000000 (0)\n-02DA23 Filename Length       0075 (117)\n-02DA25 Extra Length          0009 (9)\n-02DA27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DA27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02DA9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02DA9E   Length              0005 (5)\n-02DAA0   Flags               01 (1) 'Modification'\n-02DAA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02DAA5 PAYLOAD\n-\n-02E454 DATA DESCRIPTOR       08074B50 (134695760)\n-02E458 CRC                   4F9A1C4F (1335499855)\n-02E45C Compressed Size       000009AF (2479)\n-02E460 Uncompressed Size     000009AF (2479)\n-\n-02E464 LOCAL HEADER #78      04034B50 (67324752)\n-02E468 Extract Zip Spec      14 (20) '2.0'\n-02E469 Extract OS            00 (0) 'MS-DOS'\n-02E46A General Purpose Flag  0000 (0)\n-02E46C Compression Method    0000 (0) 'Stored'\n-02E46E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E472 CRC                   00000000 (0)\n-02E476 Compressed Size       00000000 (0)\n-02E47A Uncompressed Size     00000000 (0)\n-02E47E Filename Length       006C (108)\n-02E480 Extra Length          0009 (9)\n-02E482 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E482: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E4EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E4F0   Length              0005 (5)\n-02E4F2   Flags               01 (1) 'Modification'\n-02E4F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02E4F7 LOCAL HEADER #79      04034B50 (67324752)\n-02E4FB Extract Zip Spec      14 (20) '2.0'\n-02E4FC Extract OS            00 (0) 'MS-DOS'\n-02E4FD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02E4FF Compression Method    0000 (0) 'Stored'\n-02E501 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02E505 CRC                   00000000 (0)\n-02E509 Compressed Size       00000000 (0)\n-02E50D Uncompressed Size     00000000 (0)\n-02E511 Filename Length       0082 (130)\n-02E513 Extra Length          0009 (9)\n-02E515 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E515: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02E597 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02E599   Length              0005 (5)\n-02E59B   Flags               01 (1) 'Modification'\n-02E59C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02E5A0 PAYLOAD\n-\n-02F805 DATA DESCRIPTOR       08074B50 (134695760)\n-02F809 CRC                   754F4527 (1968129319)\n-02F80D Compressed Size       00001265 (4709)\n-02F811 Uncompressed Size     00001265 (4709)\n-\n-02F815 LOCAL HEADER #80      04034B50 (67324752)\n-02F819 Extract Zip Spec      14 (20) '2.0'\n-02F81A Extract OS            00 (0) 'MS-DOS'\n-02F81B General Purpose Flag  0000 (0)\n-02F81D Compression Method    0000 (0) 'Stored'\n-02F81F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F823 CRC                   00000000 (0)\n-02F827 Compressed Size       00000000 (0)\n-02F82B Uncompressed Size     00000000 (0)\n-02F82F Filename Length       002F (47)\n-02F831 Extra Length          0009 (9)\n-02F833 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F833: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F862 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F864   Length              0005 (5)\n-02F866   Flags               01 (1) 'Modification'\n-02F867   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F86B LOCAL HEADER #81      04034B50 (67324752)\n-02F86F Extract Zip Spec      14 (20) '2.0'\n-02F870 Extract OS            00 (0) 'MS-DOS'\n-02F871 General Purpose Flag  0000 (0)\n-02F873 Compression Method    0000 (0) 'Stored'\n-02F875 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F879 CRC                   00000000 (0)\n-02F87D Compressed Size       00000000 (0)\n-02F881 Uncompressed Size     00000000 (0)\n-02F885 Filename Length       0038 (56)\n-02F887 Extra Length          0009 (9)\n-02F889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F8C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F8C3   Length              0005 (5)\n-02F8C5   Flags               01 (1) 'Modification'\n-02F8C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F8CA LOCAL HEADER #82      04034B50 (67324752)\n-02F8CE Extract Zip Spec      14 (20) '2.0'\n-02F8CF Extract OS            00 (0) 'MS-DOS'\n-02F8D0 General Purpose Flag  0000 (0)\n-02F8D2 Compression Method    0000 (0) 'Stored'\n-02F8D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F8D8 CRC                   00000000 (0)\n-02F8DC Compressed Size       00000000 (0)\n-02F8E0 Uncompressed Size     00000000 (0)\n-02F8E4 Filename Length       007A (122)\n-02F8E6 Extra Length          0009 (9)\n-02F8E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2F8E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-02F962 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02F964   Length              0005 (5)\n-02F966   Flags               01 (1) 'Modification'\n-02F967   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-02F96B LOCAL HEADER #83      04034B50 (67324752)\n-02F96F Extract Zip Spec      14 (20) '2.0'\n-02F970 Extract OS            00 (0) 'MS-DOS'\n-02F971 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-02F973 Compression Method    0000 (0) 'Stored'\n-02F975 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-02F979 CRC                   00000000 (0)\n-02F97D Compressed Size       00000000 (0)\n-02F981 Uncompressed Size     00000000 (0)\n-02F985 Filename Length       0090 (144)\n-02F987 Extra Length          0009 (9)\n-02F989 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02CD4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02CD4D   Length              0005 (5)\n+02CD4F   Flags               01 (1) 'Modification'\n+02CD50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02CD54 PAYLOAD\n+\n+02D869 DATA DESCRIPTOR       08074B50 (134695760)\n+02D86D CRC                   164EC61D (374261277)\n+02D871 Compressed Size       00000B15 (2837)\n+02D875 Uncompressed Size     00000B15 (2837)\n+\n+02D879 LOCAL HEADER #74      04034B50 (67324752)\n+02D87D Extract Zip Spec      14 (20) '2.0'\n+02D87E Extract OS            00 (0) 'MS-DOS'\n+02D87F General Purpose Flag  0000 (0)\n+02D881 Compression Method    0000 (0) 'Stored'\n+02D883 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D887 CRC                   00000000 (0)\n+02D88B Compressed Size       00000000 (0)\n+02D88F Uncompressed Size     00000000 (0)\n+02D893 Filename Length       0025 (37)\n+02D895 Extra Length          0009 (9)\n+02D897 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D897: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D8BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D8BE   Length              0005 (5)\n+02D8C0   Flags               01 (1) 'Modification'\n+02D8C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D8C5 LOCAL HEADER #75      04034B50 (67324752)\n+02D8C9 Extract Zip Spec      14 (20) '2.0'\n+02D8CA Extract OS            00 (0) 'MS-DOS'\n+02D8CB General Purpose Flag  0000 (0)\n+02D8CD Compression Method    0000 (0) 'Stored'\n+02D8CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D8D3 CRC                   00000000 (0)\n+02D8D7 Compressed Size       00000000 (0)\n+02D8DB Uncompressed Size     00000000 (0)\n+02D8DF Filename Length       002E (46)\n+02D8E1 Extra Length          0009 (9)\n+02D8E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D8E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D911 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D913   Length              0005 (5)\n+02D915   Flags               01 (1) 'Modification'\n+02D916   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D91A LOCAL HEADER #76      04034B50 (67324752)\n+02D91E Extract Zip Spec      14 (20) '2.0'\n+02D91F Extract OS            00 (0) 'MS-DOS'\n+02D920 General Purpose Flag  0000 (0)\n+02D922 Compression Method    0000 (0) 'Stored'\n+02D924 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D928 CRC                   00000000 (0)\n+02D92C Compressed Size       00000000 (0)\n+02D930 Uncompressed Size     00000000 (0)\n+02D934 Filename Length       005F (95)\n+02D936 Extra Length          0009 (9)\n+02D938 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D938: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02D997 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02D999   Length              0005 (5)\n+02D99B   Flags               01 (1) 'Modification'\n+02D99C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02D9A0 LOCAL HEADER #77      04034B50 (67324752)\n+02D9A4 Extract Zip Spec      14 (20) '2.0'\n+02D9A5 Extract OS            00 (0) 'MS-DOS'\n+02D9A6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02D9A8 Compression Method    0000 (0) 'Stored'\n+02D9AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02D9AE CRC                   00000000 (0)\n+02D9B2 Compressed Size       00000000 (0)\n+02D9B6 Uncompressed Size     00000000 (0)\n+02D9BA Filename Length       0075 (117)\n+02D9BC Extra Length          0009 (9)\n+02D9BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D9BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02DA33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02DA35   Length              0005 (5)\n+02DA37   Flags               01 (1) 'Modification'\n+02DA38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02DA3C PAYLOAD\n+\n+02E3EB DATA DESCRIPTOR       08074B50 (134695760)\n+02E3EF CRC                   4F9A1C4F (1335499855)\n+02E3F3 Compressed Size       000009AF (2479)\n+02E3F7 Uncompressed Size     000009AF (2479)\n+\n+02E3FB LOCAL HEADER #78      04034B50 (67324752)\n+02E3FF Extract Zip Spec      14 (20) '2.0'\n+02E400 Extract OS            00 (0) 'MS-DOS'\n+02E401 General Purpose Flag  0000 (0)\n+02E403 Compression Method    0000 (0) 'Stored'\n+02E405 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E409 CRC                   00000000 (0)\n+02E40D Compressed Size       00000000 (0)\n+02E411 Uncompressed Size     00000000 (0)\n+02E415 Filename Length       006C (108)\n+02E417 Extra Length          0009 (9)\n+02E419 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E419: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E485 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E487   Length              0005 (5)\n+02E489   Flags               01 (1) 'Modification'\n+02E48A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02E48E LOCAL HEADER #79      04034B50 (67324752)\n+02E492 Extract Zip Spec      14 (20) '2.0'\n+02E493 Extract OS            00 (0) 'MS-DOS'\n+02E494 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02E496 Compression Method    0000 (0) 'Stored'\n+02E498 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02E49C CRC                   00000000 (0)\n+02E4A0 Compressed Size       00000000 (0)\n+02E4A4 Uncompressed Size     00000000 (0)\n+02E4A8 Filename Length       0082 (130)\n+02E4AA Extra Length          0009 (9)\n+02E4AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E4AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02E52E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02E530   Length              0005 (5)\n+02E532   Flags               01 (1) 'Modification'\n+02E533   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02E537 PAYLOAD\n+\n+02F79C DATA DESCRIPTOR       08074B50 (134695760)\n+02F7A0 CRC                   754F4527 (1968129319)\n+02F7A4 Compressed Size       00001265 (4709)\n+02F7A8 Uncompressed Size     00001265 (4709)\n+\n+02F7AC LOCAL HEADER #80      04034B50 (67324752)\n+02F7B0 Extract Zip Spec      14 (20) '2.0'\n+02F7B1 Extract OS            00 (0) 'MS-DOS'\n+02F7B2 General Purpose Flag  0000 (0)\n+02F7B4 Compression Method    0000 (0) 'Stored'\n+02F7B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F7BA CRC                   00000000 (0)\n+02F7BE Compressed Size       00000000 (0)\n+02F7C2 Uncompressed Size     00000000 (0)\n+02F7C6 Filename Length       002F (47)\n+02F7C8 Extra Length          0009 (9)\n+02F7CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F7CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F7F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F7FB   Length              0005 (5)\n+02F7FD   Flags               01 (1) 'Modification'\n+02F7FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F802 LOCAL HEADER #81      04034B50 (67324752)\n+02F806 Extract Zip Spec      14 (20) '2.0'\n+02F807 Extract OS            00 (0) 'MS-DOS'\n+02F808 General Purpose Flag  0000 (0)\n+02F80A Compression Method    0000 (0) 'Stored'\n+02F80C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F810 CRC                   00000000 (0)\n+02F814 Compressed Size       00000000 (0)\n+02F818 Uncompressed Size     00000000 (0)\n+02F81C Filename Length       0038 (56)\n+02F81E Extra Length          0009 (9)\n+02F820 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F820: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F858 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F85A   Length              0005 (5)\n+02F85C   Flags               01 (1) 'Modification'\n+02F85D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F861 LOCAL HEADER #82      04034B50 (67324752)\n+02F865 Extract Zip Spec      14 (20) '2.0'\n+02F866 Extract OS            00 (0) 'MS-DOS'\n+02F867 General Purpose Flag  0000 (0)\n+02F869 Compression Method    0000 (0) 'Stored'\n+02F86B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F86F CRC                   00000000 (0)\n+02F873 Compressed Size       00000000 (0)\n+02F877 Uncompressed Size     00000000 (0)\n+02F87B Filename Length       007A (122)\n+02F87D Extra Length          0009 (9)\n+02F87F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F87F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+02F8F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F8FB   Length              0005 (5)\n+02F8FD   Flags               01 (1) 'Modification'\n+02F8FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+02F902 LOCAL HEADER #83      04034B50 (67324752)\n+02F906 Extract Zip Spec      14 (20) '2.0'\n+02F907 Extract OS            00 (0) 'MS-DOS'\n+02F908 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+02F90A Compression Method    0000 (0) 'Stored'\n+02F90C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+02F910 CRC                   00000000 (0)\n+02F914 Compressed Size       00000000 (0)\n+02F918 Uncompressed Size     00000000 (0)\n+02F91C Filename Length       0090 (144)\n+02F91E Extra Length          0009 (9)\n+02F920 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2F989: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2F920: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02FA19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-02FA1B   Length              0005 (5)\n-02FA1D   Flags               01 (1) 'Modification'\n-02FA1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-02FA22 PAYLOAD\n-\n-030D49 DATA DESCRIPTOR       08074B50 (134695760)\n-030D4D CRC                   896578EC (2305128684)\n-030D51 Compressed Size       00001327 (4903)\n-030D55 Uncompressed Size     00001327 (4903)\n-\n-030D59 LOCAL HEADER #84      04034B50 (67324752)\n-030D5D Extract Zip Spec      14 (20) '2.0'\n-030D5E Extract OS            00 (0) 'MS-DOS'\n-030D5F General Purpose Flag  0000 (0)\n-030D61 Compression Method    0000 (0) 'Stored'\n-030D63 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030D67 CRC                   00000000 (0)\n-030D6B Compressed Size       00000000 (0)\n-030D6F Uncompressed Size     00000000 (0)\n-030D73 Filename Length       003B (59)\n-030D75 Extra Length          0009 (9)\n-030D77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30D77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030DB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030DB4   Length              0005 (5)\n-030DB6   Flags               01 (1) 'Modification'\n-030DB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-030DBB LOCAL HEADER #85      04034B50 (67324752)\n-030DBF Extract Zip Spec      14 (20) '2.0'\n-030DC0 Extract OS            00 (0) 'MS-DOS'\n-030DC1 General Purpose Flag  0000 (0)\n-030DC3 Compression Method    0000 (0) 'Stored'\n-030DC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030DC9 CRC                   00000000 (0)\n-030DCD Compressed Size       00000000 (0)\n-030DD1 Uncompressed Size     00000000 (0)\n-030DD5 Filename Length       0044 (68)\n-030DD7 Extra Length          0009 (9)\n-030DD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30DD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030E1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030E1F   Length              0005 (5)\n-030E21   Flags               01 (1) 'Modification'\n-030E22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-030E26 LOCAL HEADER #86      04034B50 (67324752)\n-030E2A Extract Zip Spec      14 (20) '2.0'\n-030E2B Extract OS            00 (0) 'MS-DOS'\n-030E2C General Purpose Flag  0000 (0)\n-030E2E Compression Method    0000 (0) 'Stored'\n-030E30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030E34 CRC                   00000000 (0)\n-030E38 Compressed Size       00000000 (0)\n-030E3C Uncompressed Size     00000000 (0)\n-030E40 Filename Length       0081 (129)\n-030E42 Extra Length          0009 (9)\n-030E44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30E44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-030EC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030EC7   Length              0005 (5)\n-030EC9   Flags               01 (1) 'Modification'\n-030ECA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-030ECE LOCAL HEADER #87      04034B50 (67324752)\n-030ED2 Extract Zip Spec      14 (20) '2.0'\n-030ED3 Extract OS            00 (0) 'MS-DOS'\n-030ED4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-030ED6 Compression Method    0000 (0) 'Stored'\n-030ED8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-030EDC CRC                   00000000 (0)\n-030EE0 Compressed Size       00000000 (0)\n-030EE4 Uncompressed Size     00000000 (0)\n-030EE8 Filename Length       0097 (151)\n-030EEA Extra Length          0009 (9)\n-030EEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+02F9B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+02F9B2   Length              0005 (5)\n+02F9B4   Flags               01 (1) 'Modification'\n+02F9B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+02F9B9 PAYLOAD\n+\n+030CE0 DATA DESCRIPTOR       08074B50 (134695760)\n+030CE4 CRC                   896578EC (2305128684)\n+030CE8 Compressed Size       00001327 (4903)\n+030CEC Uncompressed Size     00001327 (4903)\n+\n+030CF0 LOCAL HEADER #84      04034B50 (67324752)\n+030CF4 Extract Zip Spec      14 (20) '2.0'\n+030CF5 Extract OS            00 (0) 'MS-DOS'\n+030CF6 General Purpose Flag  0000 (0)\n+030CF8 Compression Method    0000 (0) 'Stored'\n+030CFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030CFE CRC                   00000000 (0)\n+030D02 Compressed Size       00000000 (0)\n+030D06 Uncompressed Size     00000000 (0)\n+030D0A Filename Length       003B (59)\n+030D0C Extra Length          0009 (9)\n+030D0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30D0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+030D49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030D4B   Length              0005 (5)\n+030D4D   Flags               01 (1) 'Modification'\n+030D4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+030D52 LOCAL HEADER #85      04034B50 (67324752)\n+030D56 Extract Zip Spec      14 (20) '2.0'\n+030D57 Extract OS            00 (0) 'MS-DOS'\n+030D58 General Purpose Flag  0000 (0)\n+030D5A Compression Method    0000 (0) 'Stored'\n+030D5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030D60 CRC                   00000000 (0)\n+030D64 Compressed Size       00000000 (0)\n+030D68 Uncompressed Size     00000000 (0)\n+030D6C Filename Length       0044 (68)\n+030D6E Extra Length          0009 (9)\n+030D70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30D70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+030DB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030DB6   Length              0005 (5)\n+030DB8   Flags               01 (1) 'Modification'\n+030DB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+030DBD LOCAL HEADER #86      04034B50 (67324752)\n+030DC1 Extract Zip Spec      14 (20) '2.0'\n+030DC2 Extract OS            00 (0) 'MS-DOS'\n+030DC3 General Purpose Flag  0000 (0)\n+030DC5 Compression Method    0000 (0) 'Stored'\n+030DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030DCB CRC                   00000000 (0)\n+030DCF Compressed Size       00000000 (0)\n+030DD3 Uncompressed Size     00000000 (0)\n+030DD7 Filename Length       0081 (129)\n+030DD9 Extra Length          0009 (9)\n+030DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+030E5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030E5E   Length              0005 (5)\n+030E60   Flags               01 (1) 'Modification'\n+030E61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+030E65 LOCAL HEADER #87      04034B50 (67324752)\n+030E69 Extract Zip Spec      14 (20) '2.0'\n+030E6A Extract OS            00 (0) 'MS-DOS'\n+030E6B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+030E6D Compression Method    0000 (0) 'Stored'\n+030E6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+030E73 CRC                   00000000 (0)\n+030E77 Compressed Size       00000000 (0)\n+030E7B Uncompressed Size     00000000 (0)\n+030E7F Filename Length       0097 (151)\n+030E81 Extra Length          0009 (9)\n+030E83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x30EEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x30E83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-030F83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-030F85   Length              0005 (5)\n-030F87   Flags               01 (1) 'Modification'\n-030F88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-030F8C PAYLOAD\n-\n-031CB0 DATA DESCRIPTOR       08074B50 (134695760)\n-031CB4 CRC                   64624734 (1684162356)\n-031CB8 Compressed Size       00000D24 (3364)\n-031CBC Uncompressed Size     00000D24 (3364)\n-\n-031CC0 LOCAL HEADER #88      04034B50 (67324752)\n-031CC4 Extract Zip Spec      14 (20) '2.0'\n-031CC5 Extract OS            00 (0) 'MS-DOS'\n-031CC6 General Purpose Flag  0000 (0)\n-031CC8 Compression Method    0000 (0) 'Stored'\n-031CCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031CCE CRC                   00000000 (0)\n-031CD2 Compressed Size       00000000 (0)\n-031CD6 Uncompressed Size     00000000 (0)\n-031CDA Filename Length       007D (125)\n-031CDC Extra Length          0009 (9)\n-031CDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31CDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-031D5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031D5D   Length              0005 (5)\n-031D5F   Flags               01 (1) 'Modification'\n-031D60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-031D64 LOCAL HEADER #89      04034B50 (67324752)\n-031D68 Extract Zip Spec      14 (20) '2.0'\n-031D69 Extract OS            00 (0) 'MS-DOS'\n-031D6A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-031D6C Compression Method    0000 (0) 'Stored'\n-031D6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-031D72 CRC                   00000000 (0)\n-031D76 Compressed Size       00000000 (0)\n-031D7A Uncompressed Size     00000000 (0)\n-031D7E Filename Length       0093 (147)\n-031D80 Extra Length          0009 (9)\n-031D82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+030F1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+030F1C   Length              0005 (5)\n+030F1E   Flags               01 (1) 'Modification'\n+030F1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+030F23 PAYLOAD\n+\n+031C47 DATA DESCRIPTOR       08074B50 (134695760)\n+031C4B CRC                   64624734 (1684162356)\n+031C4F Compressed Size       00000D24 (3364)\n+031C53 Uncompressed Size     00000D24 (3364)\n+\n+031C57 LOCAL HEADER #88      04034B50 (67324752)\n+031C5B Extract Zip Spec      14 (20) '2.0'\n+031C5C Extract OS            00 (0) 'MS-DOS'\n+031C5D General Purpose Flag  0000 (0)\n+031C5F Compression Method    0000 (0) 'Stored'\n+031C61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031C65 CRC                   00000000 (0)\n+031C69 Compressed Size       00000000 (0)\n+031C6D Uncompressed Size     00000000 (0)\n+031C71 Filename Length       007D (125)\n+031C73 Extra Length          0009 (9)\n+031C75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31C75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+031CF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+031CF4   Length              0005 (5)\n+031CF6   Flags               01 (1) 'Modification'\n+031CF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+031CFB LOCAL HEADER #89      04034B50 (67324752)\n+031CFF Extract Zip Spec      14 (20) '2.0'\n+031D00 Extract OS            00 (0) 'MS-DOS'\n+031D01 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+031D03 Compression Method    0000 (0) 'Stored'\n+031D05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+031D09 CRC                   00000000 (0)\n+031D0D Compressed Size       00000000 (0)\n+031D11 Uncompressed Size     00000000 (0)\n+031D15 Filename Length       0093 (147)\n+031D17 Extra Length          0009 (9)\n+031D19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x31D82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x31D19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-031E15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-031E17   Length              0005 (5)\n-031E19   Flags               01 (1) 'Modification'\n-031E1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-031E1E PAYLOAD\n-\n-0326EB DATA DESCRIPTOR       08074B50 (134695760)\n-0326EF CRC                   2B6EF697 (728692375)\n-0326F3 Compressed Size       000008CD (2253)\n-0326F7 Uncompressed Size     000008CD (2253)\n-\n-0326FB LOCAL HEADER #90      04034B50 (67324752)\n-0326FF Extract Zip Spec      14 (20) '2.0'\n-032700 Extract OS            00 (0) 'MS-DOS'\n-032701 General Purpose Flag  0000 (0)\n-032703 Compression Method    0000 (0) 'Stored'\n-032705 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-032709 CRC                   00000000 (0)\n-03270D Compressed Size       00000000 (0)\n-032711 Uncompressed Size     00000000 (0)\n-032715 Filename Length       0034 (52)\n-032717 Extra Length          0009 (9)\n-032719 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x32719: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03274D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03274F   Length              0005 (5)\n-032751   Flags               01 (1) 'Modification'\n-032752   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-032756 LOCAL HEADER #91      04034B50 (67324752)\n-03275A Extract Zip Spec      14 (20) '2.0'\n-03275B Extract OS            00 (0) 'MS-DOS'\n-03275C General Purpose Flag  0000 (0)\n-03275E Compression Method    0000 (0) 'Stored'\n-032760 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-032764 CRC                   00000000 (0)\n-032768 Compressed Size       00000000 (0)\n-03276C Uncompressed Size     00000000 (0)\n-032770 Filename Length       003D (61)\n-032772 Extra Length          0009 (9)\n-032774 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x32774: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0327B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0327B3   Length              0005 (5)\n-0327B5   Flags               01 (1) 'Modification'\n-0327B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0327BA LOCAL HEADER #92      04034B50 (67324752)\n-0327BE Extract Zip Spec      14 (20) '2.0'\n-0327BF Extract OS            00 (0) 'MS-DOS'\n-0327C0 General Purpose Flag  0000 (0)\n-0327C2 Compression Method    0000 (0) 'Stored'\n-0327C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0327C8 CRC                   00000000 (0)\n-0327CC Compressed Size       00000000 (0)\n-0327D0 Uncompressed Size     00000000 (0)\n-0327D4 Filename Length       007B (123)\n-0327D6 Extra Length          0009 (9)\n-0327D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x327D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-032853 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-032855   Length              0005 (5)\n-032857   Flags               01 (1) 'Modification'\n-032858   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03285C LOCAL HEADER #93      04034B50 (67324752)\n-032860 Extract Zip Spec      14 (20) '2.0'\n-032861 Extract OS            00 (0) 'MS-DOS'\n-032862 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-032864 Compression Method    0000 (0) 'Stored'\n-032866 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03286A CRC                   00000000 (0)\n-03286E Compressed Size       00000000 (0)\n-032872 Uncompressed Size     00000000 (0)\n-032876 Filename Length       0091 (145)\n-032878 Extra Length          0009 (9)\n-03287A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+031DAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+031DAE   Length              0005 (5)\n+031DB0   Flags               01 (1) 'Modification'\n+031DB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+031DB5 PAYLOAD\n+\n+032682 DATA DESCRIPTOR       08074B50 (134695760)\n+032686 CRC                   2B6EF697 (728692375)\n+03268A Compressed Size       000008CD (2253)\n+03268E Uncompressed Size     000008CD (2253)\n+\n+032692 LOCAL HEADER #90      04034B50 (67324752)\n+032696 Extract Zip Spec      14 (20) '2.0'\n+032697 Extract OS            00 (0) 'MS-DOS'\n+032698 General Purpose Flag  0000 (0)\n+03269A Compression Method    0000 (0) 'Stored'\n+03269C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0326A0 CRC                   00000000 (0)\n+0326A4 Compressed Size       00000000 (0)\n+0326A8 Uncompressed Size     00000000 (0)\n+0326AC Filename Length       0034 (52)\n+0326AE Extra Length          0009 (9)\n+0326B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x326B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0326E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0326E6   Length              0005 (5)\n+0326E8   Flags               01 (1) 'Modification'\n+0326E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0326ED LOCAL HEADER #91      04034B50 (67324752)\n+0326F1 Extract Zip Spec      14 (20) '2.0'\n+0326F2 Extract OS            00 (0) 'MS-DOS'\n+0326F3 General Purpose Flag  0000 (0)\n+0326F5 Compression Method    0000 (0) 'Stored'\n+0326F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0326FB CRC                   00000000 (0)\n+0326FF Compressed Size       00000000 (0)\n+032703 Uncompressed Size     00000000 (0)\n+032707 Filename Length       003D (61)\n+032709 Extra Length          0009 (9)\n+03270B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3270B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+032748 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03274A   Length              0005 (5)\n+03274C   Flags               01 (1) 'Modification'\n+03274D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+032751 LOCAL HEADER #92      04034B50 (67324752)\n+032755 Extract Zip Spec      14 (20) '2.0'\n+032756 Extract OS            00 (0) 'MS-DOS'\n+032757 General Purpose Flag  0000 (0)\n+032759 Compression Method    0000 (0) 'Stored'\n+03275B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03275F CRC                   00000000 (0)\n+032763 Compressed Size       00000000 (0)\n+032767 Uncompressed Size     00000000 (0)\n+03276B Filename Length       007B (123)\n+03276D Extra Length          0009 (9)\n+03276F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3276F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0327EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0327EC   Length              0005 (5)\n+0327EE   Flags               01 (1) 'Modification'\n+0327EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0327F3 LOCAL HEADER #93      04034B50 (67324752)\n+0327F7 Extract Zip Spec      14 (20) '2.0'\n+0327F8 Extract OS            00 (0) 'MS-DOS'\n+0327F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0327FB Compression Method    0000 (0) 'Stored'\n+0327FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+032801 CRC                   00000000 (0)\n+032805 Compressed Size       00000000 (0)\n+032809 Uncompressed Size     00000000 (0)\n+03280D Filename Length       0091 (145)\n+03280F Extra Length          0009 (9)\n+032811 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3287A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x32811: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03290B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03290D   Length              0005 (5)\n-03290F   Flags               01 (1) 'Modification'\n-032910   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-032914 PAYLOAD\n-\n-033CC5 DATA DESCRIPTOR       08074B50 (134695760)\n-033CC9 CRC                   DBC79151 (3687289169)\n-033CCD Compressed Size       000013B1 (5041)\n-033CD1 Uncompressed Size     000013B1 (5041)\n-\n-033CD5 LOCAL HEADER #94      04034B50 (67324752)\n-033CD9 Extract Zip Spec      14 (20) '2.0'\n-033CDA Extract OS            00 (0) 'MS-DOS'\n-033CDB General Purpose Flag  0000 (0)\n-033CDD Compression Method    0000 (0) 'Stored'\n-033CDF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033CE3 CRC                   00000000 (0)\n-033CE7 Compressed Size       00000000 (0)\n-033CEB Uncompressed Size     00000000 (0)\n-033CEF Filename Length       0081 (129)\n-033CF1 Extra Length          0009 (9)\n-033CF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x33CF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-033D74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033D76   Length              0005 (5)\n-033D78   Flags               01 (1) 'Modification'\n-033D79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-033D7D LOCAL HEADER #95      04034B50 (67324752)\n-033D81 Extract Zip Spec      14 (20) '2.0'\n-033D82 Extract OS            00 (0) 'MS-DOS'\n-033D83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-033D85 Compression Method    0000 (0) 'Stored'\n-033D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-033D8B CRC                   00000000 (0)\n-033D8F Compressed Size       00000000 (0)\n-033D93 Uncompressed Size     00000000 (0)\n-033D97 Filename Length       0097 (151)\n-033D99 Extra Length          0009 (9)\n-033D9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0328A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0328A4   Length              0005 (5)\n+0328A6   Flags               01 (1) 'Modification'\n+0328A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0328AB PAYLOAD\n+\n+033C5C DATA DESCRIPTOR       08074B50 (134695760)\n+033C60 CRC                   DBC79151 (3687289169)\n+033C64 Compressed Size       000013B1 (5041)\n+033C68 Uncompressed Size     000013B1 (5041)\n+\n+033C6C LOCAL HEADER #94      04034B50 (67324752)\n+033C70 Extract Zip Spec      14 (20) '2.0'\n+033C71 Extract OS            00 (0) 'MS-DOS'\n+033C72 General Purpose Flag  0000 (0)\n+033C74 Compression Method    0000 (0) 'Stored'\n+033C76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+033C7A CRC                   00000000 (0)\n+033C7E Compressed Size       00000000 (0)\n+033C82 Uncompressed Size     00000000 (0)\n+033C86 Filename Length       0081 (129)\n+033C88 Extra Length          0009 (9)\n+033C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x33C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+033D0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+033D0D   Length              0005 (5)\n+033D0F   Flags               01 (1) 'Modification'\n+033D10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+033D14 LOCAL HEADER #95      04034B50 (67324752)\n+033D18 Extract Zip Spec      14 (20) '2.0'\n+033D19 Extract OS            00 (0) 'MS-DOS'\n+033D1A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+033D1C Compression Method    0000 (0) 'Stored'\n+033D1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+033D22 CRC                   00000000 (0)\n+033D26 Compressed Size       00000000 (0)\n+033D2A Uncompressed Size     00000000 (0)\n+033D2E Filename Length       0097 (151)\n+033D30 Extra Length          0009 (9)\n+033D32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x33D9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x33D32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-033E32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-033E34   Length              0005 (5)\n-033E36   Flags               01 (1) 'Modification'\n-033E37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-033E3B PAYLOAD\n-\n-034489 DATA DESCRIPTOR       08074B50 (134695760)\n-03448D CRC                   9AFFB21B (2600448539)\n-034491 Compressed Size       0000064E (1614)\n-034495 Uncompressed Size     0000064E (1614)\n-\n-034499 LOCAL HEADER #96      04034B50 (67324752)\n-03449D Extract Zip Spec      14 (20) '2.0'\n-03449E Extract OS            00 (0) 'MS-DOS'\n-03449F General Purpose Flag  0000 (0)\n-0344A1 Compression Method    0000 (0) 'Stored'\n-0344A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0344A7 CRC                   00000000 (0)\n-0344AB Compressed Size       00000000 (0)\n-0344AF Uncompressed Size     00000000 (0)\n-0344B3 Filename Length       007D (125)\n-0344B5 Extra Length          0009 (9)\n-0344B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x344B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-034534 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-034536   Length              0005 (5)\n-034538   Flags               01 (1) 'Modification'\n-034539   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03453D LOCAL HEADER #97      04034B50 (67324752)\n-034541 Extract Zip Spec      14 (20) '2.0'\n-034542 Extract OS            00 (0) 'MS-DOS'\n-034543 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-034545 Compression Method    0000 (0) 'Stored'\n-034547 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03454B CRC                   00000000 (0)\n-03454F Compressed Size       00000000 (0)\n-034553 Uncompressed Size     00000000 (0)\n-034557 Filename Length       0093 (147)\n-034559 Extra Length          0009 (9)\n-03455B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+033DC9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+033DCB   Length              0005 (5)\n+033DCD   Flags               01 (1) 'Modification'\n+033DCE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+033DD2 PAYLOAD\n+\n+034420 DATA DESCRIPTOR       08074B50 (134695760)\n+034424 CRC                   9AFFB21B (2600448539)\n+034428 Compressed Size       0000064E (1614)\n+03442C Uncompressed Size     0000064E (1614)\n+\n+034430 LOCAL HEADER #96      04034B50 (67324752)\n+034434 Extract Zip Spec      14 (20) '2.0'\n+034435 Extract OS            00 (0) 'MS-DOS'\n+034436 General Purpose Flag  0000 (0)\n+034438 Compression Method    0000 (0) 'Stored'\n+03443A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03443E CRC                   00000000 (0)\n+034442 Compressed Size       00000000 (0)\n+034446 Uncompressed Size     00000000 (0)\n+03444A Filename Length       007D (125)\n+03444C Extra Length          0009 (9)\n+03444E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3444E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0344CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0344CD   Length              0005 (5)\n+0344CF   Flags               01 (1) 'Modification'\n+0344D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0344D4 LOCAL HEADER #97      04034B50 (67324752)\n+0344D8 Extract Zip Spec      14 (20) '2.0'\n+0344D9 Extract OS            00 (0) 'MS-DOS'\n+0344DA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0344DC Compression Method    0000 (0) 'Stored'\n+0344DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0344E2 CRC                   00000000 (0)\n+0344E6 Compressed Size       00000000 (0)\n+0344EA Uncompressed Size     00000000 (0)\n+0344EE Filename Length       0093 (147)\n+0344F0 Extra Length          0009 (9)\n+0344F2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3455B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x344F2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0345EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0345F0   Length              0005 (5)\n-0345F2   Flags               01 (1) 'Modification'\n-0345F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0345F7 PAYLOAD\n-\n-035046 DATA DESCRIPTOR       08074B50 (134695760)\n-03504A CRC                   88CF36AA (2295281322)\n-03504E Compressed Size       00000A4F (2639)\n-035052 Uncompressed Size     00000A4F (2639)\n-\n-035056 LOCAL HEADER #98      04034B50 (67324752)\n-03505A Extract Zip Spec      14 (20) '2.0'\n-03505B Extract OS            00 (0) 'MS-DOS'\n-03505C General Purpose Flag  0000 (0)\n-03505E Compression Method    0000 (0) 'Stored'\n-035060 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035064 CRC                   00000000 (0)\n-035068 Compressed Size       00000000 (0)\n-03506C Uncompressed Size     00000000 (0)\n-035070 Filename Length       0086 (134)\n-035072 Extra Length          0009 (9)\n-035074 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+034585 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+034587   Length              0005 (5)\n+034589   Flags               01 (1) 'Modification'\n+03458A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03458E PAYLOAD\n+\n+034FDD DATA DESCRIPTOR       08074B50 (134695760)\n+034FE1 CRC                   88CF36AA (2295281322)\n+034FE5 Compressed Size       00000A4F (2639)\n+034FE9 Uncompressed Size     00000A4F (2639)\n+\n+034FED LOCAL HEADER #98      04034B50 (67324752)\n+034FF1 Extract Zip Spec      14 (20) '2.0'\n+034FF2 Extract OS            00 (0) 'MS-DOS'\n+034FF3 General Purpose Flag  0000 (0)\n+034FF5 Compression Method    0000 (0) 'Stored'\n+034FF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+034FFB CRC                   00000000 (0)\n+034FFF Compressed Size       00000000 (0)\n+035003 Uncompressed Size     00000000 (0)\n+035007 Filename Length       0086 (134)\n+035009 Extra Length          0009 (9)\n+03500B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x35074: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3500B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0350FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0350FC   Length              0005 (5)\n-0350FE   Flags               01 (1) 'Modification'\n-0350FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-035103 LOCAL HEADER #99      04034B50 (67324752)\n-035107 Extract Zip Spec      14 (20) '2.0'\n-035108 Extract OS            00 (0) 'MS-DOS'\n-035109 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03510B Compression Method    0000 (0) 'Stored'\n-03510D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035111 CRC                   00000000 (0)\n-035115 Compressed Size       00000000 (0)\n-035119 Uncompressed Size     00000000 (0)\n-03511D Filename Length       009C (156)\n-03511F Extra Length          0009 (9)\n-035121 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035091 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035093   Length              0005 (5)\n+035095   Flags               01 (1) 'Modification'\n+035096   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03509A LOCAL HEADER #99      04034B50 (67324752)\n+03509E Extract Zip Spec      14 (20) '2.0'\n+03509F Extract OS            00 (0) 'MS-DOS'\n+0350A0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0350A2 Compression Method    0000 (0) 'Stored'\n+0350A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0350A8 CRC                   00000000 (0)\n+0350AC Compressed Size       00000000 (0)\n+0350B0 Uncompressed Size     00000000 (0)\n+0350B4 Filename Length       009C (156)\n+0350B6 Extra Length          0009 (9)\n+0350B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x35121: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x350B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0351BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0351BF   Length              0005 (5)\n-0351C1   Flags               01 (1) 'Modification'\n-0351C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0351C6 PAYLOAD\n-\n-035ECB DATA DESCRIPTOR       08074B50 (134695760)\n-035ECF CRC                   9593555C (2509460828)\n-035ED3 Compressed Size       00000D05 (3333)\n-035ED7 Uncompressed Size     00000D05 (3333)\n-\n-035EDB LOCAL HEADER #100     04034B50 (67324752)\n-035EDF Extract Zip Spec      14 (20) '2.0'\n-035EE0 Extract OS            00 (0) 'MS-DOS'\n-035EE1 General Purpose Flag  0000 (0)\n-035EE3 Compression Method    0000 (0) 'Stored'\n-035EE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035EE9 CRC                   00000000 (0)\n-035EED Compressed Size       00000000 (0)\n-035EF1 Uncompressed Size     00000000 (0)\n-035EF5 Filename Length       007B (123)\n-035EF7 Extra Length          0009 (9)\n-035EF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35EF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-035F74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-035F76   Length              0005 (5)\n-035F78   Flags               01 (1) 'Modification'\n-035F79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-035F7D LOCAL HEADER #101     04034B50 (67324752)\n-035F81 Extract Zip Spec      14 (20) '2.0'\n-035F82 Extract OS            00 (0) 'MS-DOS'\n-035F83 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-035F85 Compression Method    0000 (0) 'Stored'\n-035F87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-035F8B CRC                   00000000 (0)\n-035F8F Compressed Size       00000000 (0)\n-035F93 Uncompressed Size     00000000 (0)\n-035F97 Filename Length       0091 (145)\n-035F99 Extra Length          0009 (9)\n-035F9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035154 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035156   Length              0005 (5)\n+035158   Flags               01 (1) 'Modification'\n+035159   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03515D PAYLOAD\n+\n+035E62 DATA DESCRIPTOR       08074B50 (134695760)\n+035E66 CRC                   9593555C (2509460828)\n+035E6A Compressed Size       00000D05 (3333)\n+035E6E Uncompressed Size     00000D05 (3333)\n+\n+035E72 LOCAL HEADER #100     04034B50 (67324752)\n+035E76 Extract Zip Spec      14 (20) '2.0'\n+035E77 Extract OS            00 (0) 'MS-DOS'\n+035E78 General Purpose Flag  0000 (0)\n+035E7A Compression Method    0000 (0) 'Stored'\n+035E7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035E80 CRC                   00000000 (0)\n+035E84 Compressed Size       00000000 (0)\n+035E88 Uncompressed Size     00000000 (0)\n+035E8C Filename Length       007B (123)\n+035E8E Extra Length          0009 (9)\n+035E90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35E90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+035F0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035F0D   Length              0005 (5)\n+035F0F   Flags               01 (1) 'Modification'\n+035F10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+035F14 LOCAL HEADER #101     04034B50 (67324752)\n+035F18 Extract Zip Spec      14 (20) '2.0'\n+035F19 Extract OS            00 (0) 'MS-DOS'\n+035F1A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+035F1C Compression Method    0000 (0) 'Stored'\n+035F1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+035F22 CRC                   00000000 (0)\n+035F26 Compressed Size       00000000 (0)\n+035F2A Uncompressed Size     00000000 (0)\n+035F2E Filename Length       0091 (145)\n+035F30 Extra Length          0009 (9)\n+035F32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x35F9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x35F32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03602C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03602E   Length              0005 (5)\n-036030   Flags               01 (1) 'Modification'\n-036031   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-036035 PAYLOAD\n-\n-037412 DATA DESCRIPTOR       08074B50 (134695760)\n-037416 CRC                   9640338D (2520789901)\n-03741A Compressed Size       000013DD (5085)\n-03741E Uncompressed Size     000013DD (5085)\n-\n-037422 LOCAL HEADER #102     04034B50 (67324752)\n-037426 Extract Zip Spec      14 (20) '2.0'\n-037427 Extract OS            00 (0) 'MS-DOS'\n-037428 General Purpose Flag  0000 (0)\n-03742A Compression Method    0000 (0) 'Stored'\n-03742C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-037430 CRC                   00000000 (0)\n-037434 Compressed Size       00000000 (0)\n-037438 Uncompressed Size     00000000 (0)\n-03743C Filename Length       007D (125)\n-03743E Extra Length          0009 (9)\n-037440 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37440: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0374BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0374BF   Length              0005 (5)\n-0374C1   Flags               01 (1) 'Modification'\n-0374C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0374C6 LOCAL HEADER #103     04034B50 (67324752)\n-0374CA Extract Zip Spec      14 (20) '2.0'\n-0374CB Extract OS            00 (0) 'MS-DOS'\n-0374CC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0374CE Compression Method    0000 (0) 'Stored'\n-0374D0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0374D4 CRC                   00000000 (0)\n-0374D8 Compressed Size       00000000 (0)\n-0374DC Uncompressed Size     00000000 (0)\n-0374E0 Filename Length       0093 (147)\n-0374E2 Extra Length          0009 (9)\n-0374E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+035FC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+035FC5   Length              0005 (5)\n+035FC7   Flags               01 (1) 'Modification'\n+035FC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+035FCC PAYLOAD\n+\n+0373A9 DATA DESCRIPTOR       08074B50 (134695760)\n+0373AD CRC                   9640338D (2520789901)\n+0373B1 Compressed Size       000013DD (5085)\n+0373B5 Uncompressed Size     000013DD (5085)\n+\n+0373B9 LOCAL HEADER #102     04034B50 (67324752)\n+0373BD Extract Zip Spec      14 (20) '2.0'\n+0373BE Extract OS            00 (0) 'MS-DOS'\n+0373BF General Purpose Flag  0000 (0)\n+0373C1 Compression Method    0000 (0) 'Stored'\n+0373C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0373C7 CRC                   00000000 (0)\n+0373CB Compressed Size       00000000 (0)\n+0373CF Uncompressed Size     00000000 (0)\n+0373D3 Filename Length       007D (125)\n+0373D5 Extra Length          0009 (9)\n+0373D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x373D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+037454 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037456   Length              0005 (5)\n+037458   Flags               01 (1) 'Modification'\n+037459   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03745D LOCAL HEADER #103     04034B50 (67324752)\n+037461 Extract Zip Spec      14 (20) '2.0'\n+037462 Extract OS            00 (0) 'MS-DOS'\n+037463 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+037465 Compression Method    0000 (0) 'Stored'\n+037467 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03746B CRC                   00000000 (0)\n+03746F Compressed Size       00000000 (0)\n+037473 Uncompressed Size     00000000 (0)\n+037477 Filename Length       0093 (147)\n+037479 Extra Length          0009 (9)\n+03747B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x374E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3747B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-037577 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-037579   Length              0005 (5)\n-03757B   Flags               01 (1) 'Modification'\n-03757C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-037580 PAYLOAD\n-\n-03919F DATA DESCRIPTOR       08074B50 (134695760)\n-0391A3 CRC                   5232B519 (1379054873)\n-0391A7 Compressed Size       00001C1F (7199)\n-0391AB Uncompressed Size     00001C1F (7199)\n-\n-0391AF LOCAL HEADER #104     04034B50 (67324752)\n-0391B3 Extract Zip Spec      14 (20) '2.0'\n-0391B4 Extract OS            00 (0) 'MS-DOS'\n-0391B5 General Purpose Flag  0000 (0)\n-0391B7 Compression Method    0000 (0) 'Stored'\n-0391B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0391BD CRC                   00000000 (0)\n-0391C1 Compressed Size       00000000 (0)\n-0391C5 Uncompressed Size     00000000 (0)\n-0391C9 Filename Length       007A (122)\n-0391CB Extra Length          0009 (9)\n-0391CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x391CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-039247 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039249   Length              0005 (5)\n-03924B   Flags               01 (1) 'Modification'\n-03924C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-039250 LOCAL HEADER #105     04034B50 (67324752)\n-039254 Extract Zip Spec      14 (20) '2.0'\n-039255 Extract OS            00 (0) 'MS-DOS'\n-039256 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-039258 Compression Method    0000 (0) 'Stored'\n-03925A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03925E CRC                   00000000 (0)\n-039262 Compressed Size       00000000 (0)\n-039266 Uncompressed Size     00000000 (0)\n-03926A Filename Length       0090 (144)\n-03926C Extra Length          0009 (9)\n-03926E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03750E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+037510   Length              0005 (5)\n+037512   Flags               01 (1) 'Modification'\n+037513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+037517 PAYLOAD\n+\n+039136 DATA DESCRIPTOR       08074B50 (134695760)\n+03913A CRC                   5232B519 (1379054873)\n+03913E Compressed Size       00001C1F (7199)\n+039142 Uncompressed Size     00001C1F (7199)\n+\n+039146 LOCAL HEADER #104     04034B50 (67324752)\n+03914A Extract Zip Spec      14 (20) '2.0'\n+03914B Extract OS            00 (0) 'MS-DOS'\n+03914C General Purpose Flag  0000 (0)\n+03914E Compression Method    0000 (0) 'Stored'\n+039150 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039154 CRC                   00000000 (0)\n+039158 Compressed Size       00000000 (0)\n+03915C Uncompressed Size     00000000 (0)\n+039160 Filename Length       007A (122)\n+039162 Extra Length          0009 (9)\n+039164 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39164: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0391DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0391E0   Length              0005 (5)\n+0391E2   Flags               01 (1) 'Modification'\n+0391E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0391E7 LOCAL HEADER #105     04034B50 (67324752)\n+0391EB Extract Zip Spec      14 (20) '2.0'\n+0391EC Extract OS            00 (0) 'MS-DOS'\n+0391ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0391EF Compression Method    0000 (0) 'Stored'\n+0391F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0391F5 CRC                   00000000 (0)\n+0391F9 Compressed Size       00000000 (0)\n+0391FD Uncompressed Size     00000000 (0)\n+039201 Filename Length       0090 (144)\n+039203 Extra Length          0009 (9)\n+039205 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3926E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x39205: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0392FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-039300   Length              0005 (5)\n-039302   Flags               01 (1) 'Modification'\n-039303   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-039307 PAYLOAD\n-\n-03A6DD DATA DESCRIPTOR       08074B50 (134695760)\n-03A6E1 CRC                   57267C45 (1462139973)\n-03A6E5 Compressed Size       000013D6 (5078)\n-03A6E9 Uncompressed Size     000013D6 (5078)\n-\n-03A6ED LOCAL HEADER #106     04034B50 (67324752)\n-03A6F1 Extract Zip Spec      14 (20) '2.0'\n-03A6F2 Extract OS            00 (0) 'MS-DOS'\n-03A6F3 General Purpose Flag  0000 (0)\n-03A6F5 Compression Method    0000 (0) 'Stored'\n-03A6F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A6FB CRC                   00000000 (0)\n-03A6FF Compressed Size       00000000 (0)\n-03A703 Uncompressed Size     00000000 (0)\n-03A707 Filename Length       0081 (129)\n-03A709 Extra Length          0009 (9)\n-03A70B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A70B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A78C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A78E   Length              0005 (5)\n-03A790   Flags               01 (1) 'Modification'\n-03A791   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03A795 LOCAL HEADER #107     04034B50 (67324752)\n-03A799 Extract Zip Spec      14 (20) '2.0'\n-03A79A Extract OS            00 (0) 'MS-DOS'\n-03A79B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03A79D Compression Method    0000 (0) 'Stored'\n-03A79F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A7A3 CRC                   00000000 (0)\n-03A7A7 Compressed Size       00000000 (0)\n-03A7AB Uncompressed Size     00000000 (0)\n-03A7AF Filename Length       0097 (151)\n-03A7B1 Extra Length          0009 (9)\n-03A7B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+039295 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039297   Length              0005 (5)\n+039299   Flags               01 (1) 'Modification'\n+03929A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03929E PAYLOAD\n+\n+03A674 DATA DESCRIPTOR       08074B50 (134695760)\n+03A678 CRC                   57267C45 (1462139973)\n+03A67C Compressed Size       000013D6 (5078)\n+03A680 Uncompressed Size     000013D6 (5078)\n+\n+03A684 LOCAL HEADER #106     04034B50 (67324752)\n+03A688 Extract Zip Spec      14 (20) '2.0'\n+03A689 Extract OS            00 (0) 'MS-DOS'\n+03A68A General Purpose Flag  0000 (0)\n+03A68C Compression Method    0000 (0) 'Stored'\n+03A68E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03A692 CRC                   00000000 (0)\n+03A696 Compressed Size       00000000 (0)\n+03A69A Uncompressed Size     00000000 (0)\n+03A69E Filename Length       0081 (129)\n+03A6A0 Extra Length          0009 (9)\n+03A6A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A6A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03A723 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A725   Length              0005 (5)\n+03A727   Flags               01 (1) 'Modification'\n+03A728   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03A72C LOCAL HEADER #107     04034B50 (67324752)\n+03A730 Extract Zip Spec      14 (20) '2.0'\n+03A731 Extract OS            00 (0) 'MS-DOS'\n+03A732 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03A734 Compression Method    0000 (0) 'Stored'\n+03A736 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03A73A CRC                   00000000 (0)\n+03A73E Compressed Size       00000000 (0)\n+03A742 Uncompressed Size     00000000 (0)\n+03A746 Filename Length       0097 (151)\n+03A748 Extra Length          0009 (9)\n+03A74A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3A7B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A74A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03A84A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A84C   Length              0005 (5)\n-03A84E   Flags               01 (1) 'Modification'\n-03A84F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03A853 PAYLOAD\n-\n-03AF89 DATA DESCRIPTOR       08074B50 (134695760)\n-03AF8D CRC                   333FC2BB (859816635)\n-03AF91 Compressed Size       00000736 (1846)\n-03AF95 Uncompressed Size     00000736 (1846)\n-\n-03AF99 LOCAL HEADER #108     04034B50 (67324752)\n-03AF9D Extract Zip Spec      14 (20) '2.0'\n-03AF9E Extract OS            00 (0) 'MS-DOS'\n-03AF9F General Purpose Flag  0000 (0)\n-03AFA1 Compression Method    0000 (0) 'Stored'\n-03AFA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AFA7 CRC                   00000000 (0)\n-03AFAB Compressed Size       00000000 (0)\n-03AFAF Uncompressed Size     00000000 (0)\n-03AFB3 Filename Length       0024 (36)\n-03AFB5 Extra Length          0009 (9)\n-03AFB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AFB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03AFDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03AFDD   Length              0005 (5)\n-03AFDF   Flags               01 (1) 'Modification'\n-03AFE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03AFE4 LOCAL HEADER #109     04034B50 (67324752)\n-03AFE8 Extract Zip Spec      14 (20) '2.0'\n-03AFE9 Extract OS            00 (0) 'MS-DOS'\n-03AFEA General Purpose Flag  0000 (0)\n-03AFEC Compression Method    0000 (0) 'Stored'\n-03AFEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AFF2 CRC                   00000000 (0)\n-03AFF6 Compressed Size       00000000 (0)\n-03AFFA Uncompressed Size     00000000 (0)\n-03AFFE Filename Length       002D (45)\n-03B000 Extra Length          0009 (9)\n-03B002 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B002: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B02F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B031   Length              0005 (5)\n-03B033   Flags               01 (1) 'Modification'\n-03B034   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B038 LOCAL HEADER #110     04034B50 (67324752)\n-03B03C Extract Zip Spec      14 (20) '2.0'\n-03B03D Extract OS            00 (0) 'MS-DOS'\n-03B03E General Purpose Flag  0000 (0)\n-03B040 Compression Method    0000 (0) 'Stored'\n-03B042 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B046 CRC                   00000000 (0)\n-03B04A Compressed Size       00000000 (0)\n-03B04E Uncompressed Size     00000000 (0)\n-03B052 Filename Length       005A (90)\n-03B054 Extra Length          0009 (9)\n-03B056 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B056: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B0B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B0B2   Length              0005 (5)\n-03B0B4   Flags               01 (1) 'Modification'\n-03B0B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B0B9 LOCAL HEADER #111     04034B50 (67324752)\n-03B0BD Extract Zip Spec      14 (20) '2.0'\n-03B0BE Extract OS            00 (0) 'MS-DOS'\n-03B0BF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03B0C1 Compression Method    0000 (0) 'Stored'\n-03B0C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B0C7 CRC                   00000000 (0)\n-03B0CB Compressed Size       00000000 (0)\n-03B0CF Uncompressed Size     00000000 (0)\n-03B0D3 Filename Length       0070 (112)\n-03B0D5 Extra Length          0009 (9)\n-03B0D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B0D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B147 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B149   Length              0005 (5)\n-03B14B   Flags               01 (1) 'Modification'\n-03B14C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03B150 PAYLOAD\n-\n-03BB1D DATA DESCRIPTOR       08074B50 (134695760)\n-03BB21 CRC                   10CC5E74 (281828980)\n-03BB25 Compressed Size       000009CD (2509)\n-03BB29 Uncompressed Size     000009CD (2509)\n-\n-03BB2D LOCAL HEADER #112     04034B50 (67324752)\n-03BB31 Extract Zip Spec      14 (20) '2.0'\n-03BB32 Extract OS            00 (0) 'MS-DOS'\n-03BB33 General Purpose Flag  0000 (0)\n-03BB35 Compression Method    0000 (0) 'Stored'\n-03BB37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03BB3B CRC                   00000000 (0)\n-03BB3F Compressed Size       00000000 (0)\n-03BB43 Uncompressed Size     00000000 (0)\n-03BB47 Filename Length       005A (90)\n-03BB49 Extra Length          0009 (9)\n-03BB4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BB4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03BBA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03BBA7   Length              0005 (5)\n-03BBA9   Flags               01 (1) 'Modification'\n-03BBAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03BBAE LOCAL HEADER #113     04034B50 (67324752)\n-03BBB2 Extract Zip Spec      14 (20) '2.0'\n-03BBB3 Extract OS            00 (0) 'MS-DOS'\n-03BBB4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03BBB6 Compression Method    0000 (0) 'Stored'\n-03BBB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03BBBC CRC                   00000000 (0)\n-03BBC0 Compressed Size       00000000 (0)\n-03BBC4 Uncompressed Size     00000000 (0)\n-03BBC8 Filename Length       0070 (112)\n-03BBCA Extra Length          0009 (9)\n-03BBCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BBCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03BC3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03BC3E   Length              0005 (5)\n-03BC40   Flags               01 (1) 'Modification'\n-03BC41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03BC45 PAYLOAD\n-\n-03C5E5 DATA DESCRIPTOR       08074B50 (134695760)\n-03C5E9 CRC                   5F6BF872 (1600911474)\n-03C5ED Compressed Size       000009A0 (2464)\n-03C5F1 Uncompressed Size     000009A0 (2464)\n-\n-03C5F5 LOCAL HEADER #114     04034B50 (67324752)\n-03C5F9 Extract Zip Spec      14 (20) '2.0'\n-03C5FA Extract OS            00 (0) 'MS-DOS'\n-03C5FB General Purpose Flag  0000 (0)\n-03C5FD Compression Method    0000 (0) 'Stored'\n-03C5FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C603 CRC                   00000000 (0)\n-03C607 Compressed Size       00000000 (0)\n-03C60B Uncompressed Size     00000000 (0)\n-03C60F Filename Length       0023 (35)\n-03C611 Extra Length          0009 (9)\n-03C613 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C613: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C636 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C638   Length              0005 (5)\n-03C63A   Flags               01 (1) 'Modification'\n-03C63B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C63F LOCAL HEADER #115     04034B50 (67324752)\n-03C643 Extract Zip Spec      14 (20) '2.0'\n-03C644 Extract OS            00 (0) 'MS-DOS'\n-03C645 General Purpose Flag  0000 (0)\n-03C647 Compression Method    0000 (0) 'Stored'\n-03C649 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C64D CRC                   00000000 (0)\n-03C651 Compressed Size       00000000 (0)\n-03C655 Uncompressed Size     00000000 (0)\n-03C659 Filename Length       002C (44)\n-03C65B Extra Length          0009 (9)\n-03C65D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C65D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C689 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C68B   Length              0005 (5)\n-03C68D   Flags               01 (1) 'Modification'\n-03C68E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C692 LOCAL HEADER #116     04034B50 (67324752)\n-03C696 Extract Zip Spec      14 (20) '2.0'\n-03C697 Extract OS            00 (0) 'MS-DOS'\n-03C698 General Purpose Flag  0000 (0)\n-03C69A Compression Method    0000 (0) 'Stored'\n-03C69C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C6A0 CRC                   00000000 (0)\n-03C6A4 Compressed Size       00000000 (0)\n-03C6A8 Uncompressed Size     00000000 (0)\n-03C6AC Filename Length       0056 (86)\n-03C6AE Extra Length          0009 (9)\n-03C6B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C6B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C706 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C708   Length              0005 (5)\n-03C70A   Flags               01 (1) 'Modification'\n-03C70B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C70F LOCAL HEADER #117     04034B50 (67324752)\n-03C713 Extract Zip Spec      14 (20) '2.0'\n-03C714 Extract OS            00 (0) 'MS-DOS'\n-03C715 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03C717 Compression Method    0000 (0) 'Stored'\n-03C719 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C71D CRC                   00000000 (0)\n-03C721 Compressed Size       00000000 (0)\n-03C725 Uncompressed Size     00000000 (0)\n-03C729 Filename Length       006C (108)\n-03C72B Extra Length          0009 (9)\n-03C72D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C72D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C79B   Length              0005 (5)\n-03C79D   Flags               01 (1) 'Modification'\n-03C79E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03C7A2 PAYLOAD\n-\n-03D8D7 DATA DESCRIPTOR       08074B50 (134695760)\n-03D8DB CRC                   456B0BC9 (1164643273)\n-03D8DF Compressed Size       00001135 (4405)\n-03D8E3 Uncompressed Size     00001135 (4405)\n-\n-03D8E7 LOCAL HEADER #118     04034B50 (67324752)\n-03D8EB Extract Zip Spec      14 (20) '2.0'\n-03D8EC Extract OS            00 (0) 'MS-DOS'\n-03D8ED General Purpose Flag  0000 (0)\n-03D8EF Compression Method    0000 (0) 'Stored'\n-03D8F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D8F5 CRC                   00000000 (0)\n-03D8F9 Compressed Size       00000000 (0)\n-03D8FD Uncompressed Size     00000000 (0)\n-03D901 Filename Length       0022 (34)\n-03D903 Extra Length          0009 (9)\n-03D905 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D905: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D927 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D929   Length              0005 (5)\n-03D92B   Flags               01 (1) 'Modification'\n-03D92C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D930 LOCAL HEADER #119     04034B50 (67324752)\n-03D934 Extract Zip Spec      14 (20) '2.0'\n-03D935 Extract OS            00 (0) 'MS-DOS'\n-03D936 General Purpose Flag  0000 (0)\n-03D938 Compression Method    0000 (0) 'Stored'\n-03D93A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D93E CRC                   00000000 (0)\n-03D942 Compressed Size       00000000 (0)\n-03D946 Uncompressed Size     00000000 (0)\n-03D94A Filename Length       002B (43)\n-03D94C Extra Length          0009 (9)\n-03D94E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D94E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D979 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D97B   Length              0005 (5)\n-03D97D   Flags               01 (1) 'Modification'\n-03D97E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D982 LOCAL HEADER #120     04034B50 (67324752)\n-03D986 Extract Zip Spec      14 (20) '2.0'\n-03D987 Extract OS            00 (0) 'MS-DOS'\n-03D988 General Purpose Flag  0000 (0)\n-03D98A Compression Method    0000 (0) 'Stored'\n-03D98C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D990 CRC                   00000000 (0)\n-03D994 Compressed Size       00000000 (0)\n-03D998 Uncompressed Size     00000000 (0)\n-03D99C Filename Length       005F (95)\n-03D99E Extra Length          0009 (9)\n-03D9A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D9A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D9FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DA01   Length              0005 (5)\n-03DA03   Flags               01 (1) 'Modification'\n-03DA04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03DA08 LOCAL HEADER #121     04034B50 (67324752)\n-03DA0C Extract Zip Spec      14 (20) '2.0'\n-03DA0D Extract OS            00 (0) 'MS-DOS'\n-03DA0E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03DA10 Compression Method    0000 (0) 'Stored'\n-03DA12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03DA16 CRC                   00000000 (0)\n-03DA1A Compressed Size       00000000 (0)\n-03DA1E Uncompressed Size     00000000 (0)\n-03DA22 Filename Length       0075 (117)\n-03DA24 Extra Length          0009 (9)\n-03DA26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DA26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03DA9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03DA9D   Length              0005 (5)\n-03DA9F   Flags               01 (1) 'Modification'\n-03DAA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03DAA4 PAYLOAD\n-\n-03E484 DATA DESCRIPTOR       08074B50 (134695760)\n-03E488 CRC                   6A45582D (1782929453)\n-03E48C Compressed Size       000009E0 (2528)\n-03E490 Uncompressed Size     000009E0 (2528)\n-\n-03E494 LOCAL HEADER #122     04034B50 (67324752)\n-03E498 Extract Zip Spec      14 (20) '2.0'\n-03E499 Extract OS            00 (0) 'MS-DOS'\n-03E49A General Purpose Flag  0000 (0)\n-03E49C Compression Method    0000 (0) 'Stored'\n-03E49E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E4A2 CRC                   00000000 (0)\n-03E4A6 Compressed Size       00000000 (0)\n-03E4AA Uncompressed Size     00000000 (0)\n-03E4AE Filename Length       0061 (97)\n-03E4B0 Extra Length          0009 (9)\n-03E4B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E4B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E513 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E515   Length              0005 (5)\n-03E517   Flags               01 (1) 'Modification'\n-03E518   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03E51C LOCAL HEADER #123     04034B50 (67324752)\n-03E520 Extract Zip Spec      14 (20) '2.0'\n-03E521 Extract OS            00 (0) 'MS-DOS'\n-03E522 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03E524 Compression Method    0000 (0) 'Stored'\n-03E526 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03E52A CRC                   00000000 (0)\n-03E52E Compressed Size       00000000 (0)\n-03E532 Uncompressed Size     00000000 (0)\n-03E536 Filename Length       0077 (119)\n-03E538 Extra Length          0009 (9)\n-03E53A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E53A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03E5B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03E5B3   Length              0005 (5)\n-03E5B5   Flags               01 (1) 'Modification'\n-03E5B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03E5BA PAYLOAD\n-\n-03F14A DATA DESCRIPTOR       08074B50 (134695760)\n-03F14E CRC                   4731534C (1194414924)\n-03F152 Compressed Size       00000B90 (2960)\n-03F156 Uncompressed Size     00000B90 (2960)\n-\n-03F15A LOCAL HEADER #124     04034B50 (67324752)\n-03F15E Extract Zip Spec      14 (20) '2.0'\n-03F15F Extract OS            00 (0) 'MS-DOS'\n-03F160 General Purpose Flag  0000 (0)\n-03F162 Compression Method    0000 (0) 'Stored'\n-03F164 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03F168 CRC                   00000000 (0)\n-03F16C Compressed Size       00000000 (0)\n-03F170 Uncompressed Size     00000000 (0)\n-03F174 Filename Length       0060 (96)\n-03F176 Extra Length          0009 (9)\n-03F178 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F178: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F1D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F1DA   Length              0005 (5)\n-03F1DC   Flags               01 (1) 'Modification'\n-03F1DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03F1E1 LOCAL HEADER #125     04034B50 (67324752)\n-03F1E5 Extract Zip Spec      14 (20) '2.0'\n-03F1E6 Extract OS            00 (0) 'MS-DOS'\n-03F1E7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03F1E9 Compression Method    0000 (0) 'Stored'\n-03F1EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03F1EF CRC                   00000000 (0)\n-03F1F3 Compressed Size       00000000 (0)\n-03F1F7 Uncompressed Size     00000000 (0)\n-03F1FB Filename Length       0076 (118)\n-03F1FD Extra Length          0009 (9)\n-03F1FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3F1FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03F275 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03F277   Length              0005 (5)\n-03F279   Flags               01 (1) 'Modification'\n-03F27A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03F27E PAYLOAD\n-\n-03FCFB DATA DESCRIPTOR       08074B50 (134695760)\n-03FCFF CRC                   CEBA8B64 (3468331876)\n-03FD03 Compressed Size       00000A7D (2685)\n-03FD07 Uncompressed Size     00000A7D (2685)\n-\n-03FD0B LOCAL HEADER #126     04034B50 (67324752)\n-03FD0F Extract Zip Spec      14 (20) '2.0'\n-03FD10 Extract OS            00 (0) 'MS-DOS'\n-03FD11 General Purpose Flag  0000 (0)\n-03FD13 Compression Method    0000 (0) 'Stored'\n-03FD15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FD19 CRC                   00000000 (0)\n-03FD1D Compressed Size       00000000 (0)\n-03FD21 Uncompressed Size     00000000 (0)\n-03FD25 Filename Length       005F (95)\n-03FD27 Extra Length          0009 (9)\n-03FD29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FD29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FD88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FD8A   Length              0005 (5)\n-03FD8C   Flags               01 (1) 'Modification'\n-03FD8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03FD91 LOCAL HEADER #127     04034B50 (67324752)\n-03FD95 Extract Zip Spec      14 (20) '2.0'\n-03FD96 Extract OS            00 (0) 'MS-DOS'\n-03FD97 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-03FD99 Compression Method    0000 (0) 'Stored'\n-03FD9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03FD9F CRC                   00000000 (0)\n-03FDA3 Compressed Size       00000000 (0)\n-03FDA7 Uncompressed Size     00000000 (0)\n-03FDAB Filename Length       0075 (117)\n-03FDAD Extra Length          0009 (9)\n-03FDAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3FDAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03FE24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03FE26   Length              0005 (5)\n-03FE28   Flags               01 (1) 'Modification'\n-03FE29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03FE2D PAYLOAD\n-\n-0408C2 DATA DESCRIPTOR       08074B50 (134695760)\n-0408C6 CRC                   0DACEA84 (229436036)\n-0408CA Compressed Size       00000A95 (2709)\n-0408CE Uncompressed Size     00000A95 (2709)\n-\n-0408D2 LOCAL HEADER #128     04034B50 (67324752)\n-0408D6 Extract Zip Spec      14 (20) '2.0'\n-0408D7 Extract OS            00 (0) 'MS-DOS'\n-0408D8 General Purpose Flag  0000 (0)\n-0408DA Compression Method    0000 (0) 'Stored'\n-0408DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0408E0 CRC                   00000000 (0)\n-0408E4 Compressed Size       00000000 (0)\n-0408E8 Uncompressed Size     00000000 (0)\n-0408EC Filename Length       0060 (96)\n-0408EE Extra Length          0009 (9)\n-0408F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x408F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-040950 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-040952   Length              0005 (5)\n-040954   Flags               01 (1) 'Modification'\n-040955   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-040959 LOCAL HEADER #129     04034B50 (67324752)\n-04095D Extract Zip Spec      14 (20) '2.0'\n-04095E Extract OS            00 (0) 'MS-DOS'\n-04095F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-040961 Compression Method    0000 (0) 'Stored'\n-040963 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-040967 CRC                   00000000 (0)\n-04096B Compressed Size       00000000 (0)\n-04096F Uncompressed Size     00000000 (0)\n-040973 Filename Length       0076 (118)\n-040975 Extra Length          0009 (9)\n-040977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x40977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0409ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0409EF   Length              0005 (5)\n-0409F1   Flags               01 (1) 'Modification'\n-0409F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0409F6 PAYLOAD\n-\n-041C13 DATA DESCRIPTOR       08074B50 (134695760)\n-041C17 CRC                   2E84B239 (780448313)\n-041C1B Compressed Size       0000121D (4637)\n-041C1F Uncompressed Size     0000121D (4637)\n-\n-041C23 LOCAL HEADER #130     04034B50 (67324752)\n-041C27 Extract Zip Spec      14 (20) '2.0'\n-041C28 Extract OS            00 (0) 'MS-DOS'\n-041C29 General Purpose Flag  0000 (0)\n-041C2B Compression Method    0000 (0) 'Stored'\n-041C2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-041C31 CRC                   00000000 (0)\n-041C35 Compressed Size       00000000 (0)\n-041C39 Uncompressed Size     00000000 (0)\n-041C3D Filename Length       007A (122)\n-041C3F Extra Length          0009 (9)\n-041C41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x41C41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-041CBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-041CBD   Length              0005 (5)\n-041CBF   Flags               01 (1) 'Modification'\n-041CC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-041CC4 LOCAL HEADER #131     04034B50 (67324752)\n-041CC8 Extract Zip Spec      14 (20) '2.0'\n-041CC9 Extract OS            00 (0) 'MS-DOS'\n-041CCA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-041CCC Compression Method    0000 (0) 'Stored'\n-041CCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-041CD2 CRC                   00000000 (0)\n-041CD6 Compressed Size       00000000 (0)\n-041CDA Uncompressed Size     00000000 (0)\n-041CDE Filename Length       0090 (144)\n-041CE0 Extra Length          0009 (9)\n-041CE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+03A7E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A7E3   Length              0005 (5)\n+03A7E5   Flags               01 (1) 'Modification'\n+03A7E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03A7EA PAYLOAD\n+\n+03AF20 DATA DESCRIPTOR       08074B50 (134695760)\n+03AF24 CRC                   333FC2BB (859816635)\n+03AF28 Compressed Size       00000736 (1846)\n+03AF2C Uncompressed Size     00000736 (1846)\n+\n+03AF30 LOCAL HEADER #108     04034B50 (67324752)\n+03AF34 Extract Zip Spec      14 (20) '2.0'\n+03AF35 Extract OS            00 (0) 'MS-DOS'\n+03AF36 General Purpose Flag  0000 (0)\n+03AF38 Compression Method    0000 (0) 'Stored'\n+03AF3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AF3E CRC                   00000000 (0)\n+03AF42 Compressed Size       00000000 (0)\n+03AF46 Uncompressed Size     00000000 (0)\n+03AF4A Filename Length       0024 (36)\n+03AF4C Extra Length          0009 (9)\n+03AF4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AF4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03AF72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AF74   Length              0005 (5)\n+03AF76   Flags               01 (1) 'Modification'\n+03AF77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03AF7B LOCAL HEADER #109     04034B50 (67324752)\n+03AF7F Extract Zip Spec      14 (20) '2.0'\n+03AF80 Extract OS            00 (0) 'MS-DOS'\n+03AF81 General Purpose Flag  0000 (0)\n+03AF83 Compression Method    0000 (0) 'Stored'\n+03AF85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AF89 CRC                   00000000 (0)\n+03AF8D Compressed Size       00000000 (0)\n+03AF91 Uncompressed Size     00000000 (0)\n+03AF95 Filename Length       002D (45)\n+03AF97 Extra Length          0009 (9)\n+03AF99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AF99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03AFC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AFC8   Length              0005 (5)\n+03AFCA   Flags               01 (1) 'Modification'\n+03AFCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03AFCF LOCAL HEADER #110     04034B50 (67324752)\n+03AFD3 Extract Zip Spec      14 (20) '2.0'\n+03AFD4 Extract OS            00 (0) 'MS-DOS'\n+03AFD5 General Purpose Flag  0000 (0)\n+03AFD7 Compression Method    0000 (0) 'Stored'\n+03AFD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AFDD CRC                   00000000 (0)\n+03AFE1 Compressed Size       00000000 (0)\n+03AFE5 Uncompressed Size     00000000 (0)\n+03AFE9 Filename Length       005A (90)\n+03AFEB Extra Length          0009 (9)\n+03AFED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AFED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B047 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B049   Length              0005 (5)\n+03B04B   Flags               01 (1) 'Modification'\n+03B04C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03B050 LOCAL HEADER #111     04034B50 (67324752)\n+03B054 Extract Zip Spec      14 (20) '2.0'\n+03B055 Extract OS            00 (0) 'MS-DOS'\n+03B056 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03B058 Compression Method    0000 (0) 'Stored'\n+03B05A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03B05E CRC                   00000000 (0)\n+03B062 Compressed Size       00000000 (0)\n+03B066 Uncompressed Size     00000000 (0)\n+03B06A Filename Length       0070 (112)\n+03B06C Extra Length          0009 (9)\n+03B06E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B06E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B0DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B0E0   Length              0005 (5)\n+03B0E2   Flags               01 (1) 'Modification'\n+03B0E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03B0E7 PAYLOAD\n+\n+03BAB4 DATA DESCRIPTOR       08074B50 (134695760)\n+03BAB8 CRC                   10CC5E74 (281828980)\n+03BABC Compressed Size       000009CD (2509)\n+03BAC0 Uncompressed Size     000009CD (2509)\n+\n+03BAC4 LOCAL HEADER #112     04034B50 (67324752)\n+03BAC8 Extract Zip Spec      14 (20) '2.0'\n+03BAC9 Extract OS            00 (0) 'MS-DOS'\n+03BACA General Purpose Flag  0000 (0)\n+03BACC Compression Method    0000 (0) 'Stored'\n+03BACE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03BAD2 CRC                   00000000 (0)\n+03BAD6 Compressed Size       00000000 (0)\n+03BADA Uncompressed Size     00000000 (0)\n+03BADE Filename Length       005A (90)\n+03BAE0 Extra Length          0009 (9)\n+03BAE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3BAE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03BB3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03BB3E   Length              0005 (5)\n+03BB40   Flags               01 (1) 'Modification'\n+03BB41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03BB45 LOCAL HEADER #113     04034B50 (67324752)\n+03BB49 Extract Zip Spec      14 (20) '2.0'\n+03BB4A Extract OS            00 (0) 'MS-DOS'\n+03BB4B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03BB4D Compression Method    0000 (0) 'Stored'\n+03BB4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03BB53 CRC                   00000000 (0)\n+03BB57 Compressed Size       00000000 (0)\n+03BB5B Uncompressed Size     00000000 (0)\n+03BB5F Filename Length       0070 (112)\n+03BB61 Extra Length          0009 (9)\n+03BB63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3BB63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03BBD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03BBD5   Length              0005 (5)\n+03BBD7   Flags               01 (1) 'Modification'\n+03BBD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03BBDC PAYLOAD\n+\n+03C57C DATA DESCRIPTOR       08074B50 (134695760)\n+03C580 CRC                   5F6BF872 (1600911474)\n+03C584 Compressed Size       000009A0 (2464)\n+03C588 Uncompressed Size     000009A0 (2464)\n+\n+03C58C LOCAL HEADER #114     04034B50 (67324752)\n+03C590 Extract Zip Spec      14 (20) '2.0'\n+03C591 Extract OS            00 (0) 'MS-DOS'\n+03C592 General Purpose Flag  0000 (0)\n+03C594 Compression Method    0000 (0) 'Stored'\n+03C596 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C59A CRC                   00000000 (0)\n+03C59E Compressed Size       00000000 (0)\n+03C5A2 Uncompressed Size     00000000 (0)\n+03C5A6 Filename Length       0023 (35)\n+03C5A8 Extra Length          0009 (9)\n+03C5AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C5AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C5CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C5CF   Length              0005 (5)\n+03C5D1   Flags               01 (1) 'Modification'\n+03C5D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C5D6 LOCAL HEADER #115     04034B50 (67324752)\n+03C5DA Extract Zip Spec      14 (20) '2.0'\n+03C5DB Extract OS            00 (0) 'MS-DOS'\n+03C5DC General Purpose Flag  0000 (0)\n+03C5DE Compression Method    0000 (0) 'Stored'\n+03C5E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C5E4 CRC                   00000000 (0)\n+03C5E8 Compressed Size       00000000 (0)\n+03C5EC Uncompressed Size     00000000 (0)\n+03C5F0 Filename Length       002C (44)\n+03C5F2 Extra Length          0009 (9)\n+03C5F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C5F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C620 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C622   Length              0005 (5)\n+03C624   Flags               01 (1) 'Modification'\n+03C625   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C629 LOCAL HEADER #116     04034B50 (67324752)\n+03C62D Extract Zip Spec      14 (20) '2.0'\n+03C62E Extract OS            00 (0) 'MS-DOS'\n+03C62F General Purpose Flag  0000 (0)\n+03C631 Compression Method    0000 (0) 'Stored'\n+03C633 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C637 CRC                   00000000 (0)\n+03C63B Compressed Size       00000000 (0)\n+03C63F Uncompressed Size     00000000 (0)\n+03C643 Filename Length       0056 (86)\n+03C645 Extra Length          0009 (9)\n+03C647 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C647: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C69D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C69F   Length              0005 (5)\n+03C6A1   Flags               01 (1) 'Modification'\n+03C6A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C6A6 LOCAL HEADER #117     04034B50 (67324752)\n+03C6AA Extract Zip Spec      14 (20) '2.0'\n+03C6AB Extract OS            00 (0) 'MS-DOS'\n+03C6AC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03C6AE Compression Method    0000 (0) 'Stored'\n+03C6B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C6B4 CRC                   00000000 (0)\n+03C6B8 Compressed Size       00000000 (0)\n+03C6BC Uncompressed Size     00000000 (0)\n+03C6C0 Filename Length       006C (108)\n+03C6C2 Extra Length          0009 (9)\n+03C6C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C6C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C730 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C732   Length              0005 (5)\n+03C734   Flags               01 (1) 'Modification'\n+03C735   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03C739 PAYLOAD\n+\n+03D86E DATA DESCRIPTOR       08074B50 (134695760)\n+03D872 CRC                   456B0BC9 (1164643273)\n+03D876 Compressed Size       00001135 (4405)\n+03D87A Uncompressed Size     00001135 (4405)\n+\n+03D87E LOCAL HEADER #118     04034B50 (67324752)\n+03D882 Extract Zip Spec      14 (20) '2.0'\n+03D883 Extract OS            00 (0) 'MS-DOS'\n+03D884 General Purpose Flag  0000 (0)\n+03D886 Compression Method    0000 (0) 'Stored'\n+03D888 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D88C CRC                   00000000 (0)\n+03D890 Compressed Size       00000000 (0)\n+03D894 Uncompressed Size     00000000 (0)\n+03D898 Filename Length       0022 (34)\n+03D89A Extra Length          0009 (9)\n+03D89C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D89C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D8BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D8C0   Length              0005 (5)\n+03D8C2   Flags               01 (1) 'Modification'\n+03D8C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D8C7 LOCAL HEADER #119     04034B50 (67324752)\n+03D8CB Extract Zip Spec      14 (20) '2.0'\n+03D8CC Extract OS            00 (0) 'MS-DOS'\n+03D8CD General Purpose Flag  0000 (0)\n+03D8CF Compression Method    0000 (0) 'Stored'\n+03D8D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D8D5 CRC                   00000000 (0)\n+03D8D9 Compressed Size       00000000 (0)\n+03D8DD Uncompressed Size     00000000 (0)\n+03D8E1 Filename Length       002B (43)\n+03D8E3 Extra Length          0009 (9)\n+03D8E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D8E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D910 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D912   Length              0005 (5)\n+03D914   Flags               01 (1) 'Modification'\n+03D915   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D919 LOCAL HEADER #120     04034B50 (67324752)\n+03D91D Extract Zip Spec      14 (20) '2.0'\n+03D91E Extract OS            00 (0) 'MS-DOS'\n+03D91F General Purpose Flag  0000 (0)\n+03D921 Compression Method    0000 (0) 'Stored'\n+03D923 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D927 CRC                   00000000 (0)\n+03D92B Compressed Size       00000000 (0)\n+03D92F Uncompressed Size     00000000 (0)\n+03D933 Filename Length       005F (95)\n+03D935 Extra Length          0009 (9)\n+03D937 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D937: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D996 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D998   Length              0005 (5)\n+03D99A   Flags               01 (1) 'Modification'\n+03D99B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D99F LOCAL HEADER #121     04034B50 (67324752)\n+03D9A3 Extract Zip Spec      14 (20) '2.0'\n+03D9A4 Extract OS            00 (0) 'MS-DOS'\n+03D9A5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03D9A7 Compression Method    0000 (0) 'Stored'\n+03D9A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D9AD CRC                   00000000 (0)\n+03D9B1 Compressed Size       00000000 (0)\n+03D9B5 Uncompressed Size     00000000 (0)\n+03D9B9 Filename Length       0075 (117)\n+03D9BB Extra Length          0009 (9)\n+03D9BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D9BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03DA32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03DA34   Length              0005 (5)\n+03DA36   Flags               01 (1) 'Modification'\n+03DA37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03DA3B PAYLOAD\n+\n+03E41B DATA DESCRIPTOR       08074B50 (134695760)\n+03E41F CRC                   6A45582D (1782929453)\n+03E423 Compressed Size       000009E0 (2528)\n+03E427 Uncompressed Size     000009E0 (2528)\n+\n+03E42B LOCAL HEADER #122     04034B50 (67324752)\n+03E42F Extract Zip Spec      14 (20) '2.0'\n+03E430 Extract OS            00 (0) 'MS-DOS'\n+03E431 General Purpose Flag  0000 (0)\n+03E433 Compression Method    0000 (0) 'Stored'\n+03E435 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E439 CRC                   00000000 (0)\n+03E43D Compressed Size       00000000 (0)\n+03E441 Uncompressed Size     00000000 (0)\n+03E445 Filename Length       0061 (97)\n+03E447 Extra Length          0009 (9)\n+03E449 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E449: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E4AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E4AC   Length              0005 (5)\n+03E4AE   Flags               01 (1) 'Modification'\n+03E4AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03E4B3 LOCAL HEADER #123     04034B50 (67324752)\n+03E4B7 Extract Zip Spec      14 (20) '2.0'\n+03E4B8 Extract OS            00 (0) 'MS-DOS'\n+03E4B9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03E4BB Compression Method    0000 (0) 'Stored'\n+03E4BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03E4C1 CRC                   00000000 (0)\n+03E4C5 Compressed Size       00000000 (0)\n+03E4C9 Uncompressed Size     00000000 (0)\n+03E4CD Filename Length       0077 (119)\n+03E4CF Extra Length          0009 (9)\n+03E4D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3E4D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03E548 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03E54A   Length              0005 (5)\n+03E54C   Flags               01 (1) 'Modification'\n+03E54D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03E551 PAYLOAD\n+\n+03F0E1 DATA DESCRIPTOR       08074B50 (134695760)\n+03F0E5 CRC                   4731534C (1194414924)\n+03F0E9 Compressed Size       00000B90 (2960)\n+03F0ED Uncompressed Size     00000B90 (2960)\n+\n+03F0F1 LOCAL HEADER #124     04034B50 (67324752)\n+03F0F5 Extract Zip Spec      14 (20) '2.0'\n+03F0F6 Extract OS            00 (0) 'MS-DOS'\n+03F0F7 General Purpose Flag  0000 (0)\n+03F0F9 Compression Method    0000 (0) 'Stored'\n+03F0FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F0FF CRC                   00000000 (0)\n+03F103 Compressed Size       00000000 (0)\n+03F107 Uncompressed Size     00000000 (0)\n+03F10B Filename Length       0060 (96)\n+03F10D Extra Length          0009 (9)\n+03F10F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F10F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F16F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F171   Length              0005 (5)\n+03F173   Flags               01 (1) 'Modification'\n+03F174   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03F178 LOCAL HEADER #125     04034B50 (67324752)\n+03F17C Extract Zip Spec      14 (20) '2.0'\n+03F17D Extract OS            00 (0) 'MS-DOS'\n+03F17E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03F180 Compression Method    0000 (0) 'Stored'\n+03F182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03F186 CRC                   00000000 (0)\n+03F18A Compressed Size       00000000 (0)\n+03F18E Uncompressed Size     00000000 (0)\n+03F192 Filename Length       0076 (118)\n+03F194 Extra Length          0009 (9)\n+03F196 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F196: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03F20C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03F20E   Length              0005 (5)\n+03F210   Flags               01 (1) 'Modification'\n+03F211   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03F215 PAYLOAD\n+\n+03FC92 DATA DESCRIPTOR       08074B50 (134695760)\n+03FC96 CRC                   CEBA8B64 (3468331876)\n+03FC9A Compressed Size       00000A7D (2685)\n+03FC9E Uncompressed Size     00000A7D (2685)\n+\n+03FCA2 LOCAL HEADER #126     04034B50 (67324752)\n+03FCA6 Extract Zip Spec      14 (20) '2.0'\n+03FCA7 Extract OS            00 (0) 'MS-DOS'\n+03FCA8 General Purpose Flag  0000 (0)\n+03FCAA Compression Method    0000 (0) 'Stored'\n+03FCAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03FCB0 CRC                   00000000 (0)\n+03FCB4 Compressed Size       00000000 (0)\n+03FCB8 Uncompressed Size     00000000 (0)\n+03FCBC Filename Length       005F (95)\n+03FCBE Extra Length          0009 (9)\n+03FCC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FCC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03FD1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03FD21   Length              0005 (5)\n+03FD23   Flags               01 (1) 'Modification'\n+03FD24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03FD28 LOCAL HEADER #127     04034B50 (67324752)\n+03FD2C Extract Zip Spec      14 (20) '2.0'\n+03FD2D Extract OS            00 (0) 'MS-DOS'\n+03FD2E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+03FD30 Compression Method    0000 (0) 'Stored'\n+03FD32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03FD36 CRC                   00000000 (0)\n+03FD3A Compressed Size       00000000 (0)\n+03FD3E Uncompressed Size     00000000 (0)\n+03FD42 Filename Length       0075 (117)\n+03FD44 Extra Length          0009 (9)\n+03FD46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3FD46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03FDBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03FDBD   Length              0005 (5)\n+03FDBF   Flags               01 (1) 'Modification'\n+03FDC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03FDC4 PAYLOAD\n+\n+040859 DATA DESCRIPTOR       08074B50 (134695760)\n+04085D CRC                   0DACEA84 (229436036)\n+040861 Compressed Size       00000A95 (2709)\n+040865 Uncompressed Size     00000A95 (2709)\n+\n+040869 LOCAL HEADER #128     04034B50 (67324752)\n+04086D Extract Zip Spec      14 (20) '2.0'\n+04086E Extract OS            00 (0) 'MS-DOS'\n+04086F General Purpose Flag  0000 (0)\n+040871 Compression Method    0000 (0) 'Stored'\n+040873 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+040877 CRC                   00000000 (0)\n+04087B Compressed Size       00000000 (0)\n+04087F Uncompressed Size     00000000 (0)\n+040883 Filename Length       0060 (96)\n+040885 Extra Length          0009 (9)\n+040887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x40887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0408E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0408E9   Length              0005 (5)\n+0408EB   Flags               01 (1) 'Modification'\n+0408EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0408F0 LOCAL HEADER #129     04034B50 (67324752)\n+0408F4 Extract Zip Spec      14 (20) '2.0'\n+0408F5 Extract OS            00 (0) 'MS-DOS'\n+0408F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0408F8 Compression Method    0000 (0) 'Stored'\n+0408FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0408FE CRC                   00000000 (0)\n+040902 Compressed Size       00000000 (0)\n+040906 Uncompressed Size     00000000 (0)\n+04090A Filename Length       0076 (118)\n+04090C Extra Length          0009 (9)\n+04090E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4090E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+040984 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+040986   Length              0005 (5)\n+040988   Flags               01 (1) 'Modification'\n+040989   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04098D PAYLOAD\n+\n+041BAA DATA DESCRIPTOR       08074B50 (134695760)\n+041BAE CRC                   2E84B239 (780448313)\n+041BB2 Compressed Size       0000121D (4637)\n+041BB6 Uncompressed Size     0000121D (4637)\n+\n+041BBA LOCAL HEADER #130     04034B50 (67324752)\n+041BBE Extract Zip Spec      14 (20) '2.0'\n+041BBF Extract OS            00 (0) 'MS-DOS'\n+041BC0 General Purpose Flag  0000 (0)\n+041BC2 Compression Method    0000 (0) 'Stored'\n+041BC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041BC8 CRC                   00000000 (0)\n+041BCC Compressed Size       00000000 (0)\n+041BD0 Uncompressed Size     00000000 (0)\n+041BD4 Filename Length       007A (122)\n+041BD6 Extra Length          0009 (9)\n+041BD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41BD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+041C52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041C54   Length              0005 (5)\n+041C56   Flags               01 (1) 'Modification'\n+041C57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+041C5B LOCAL HEADER #131     04034B50 (67324752)\n+041C5F Extract Zip Spec      14 (20) '2.0'\n+041C60 Extract OS            00 (0) 'MS-DOS'\n+041C61 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+041C63 Compression Method    0000 (0) 'Stored'\n+041C65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+041C69 CRC                   00000000 (0)\n+041C6D Compressed Size       00000000 (0)\n+041C71 Uncompressed Size     00000000 (0)\n+041C75 Filename Length       0090 (144)\n+041C77 Extra Length          0009 (9)\n+041C79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x41CE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x41C79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-041D72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-041D74   Length              0005 (5)\n-041D76   Flags               01 (1) 'Modification'\n-041D77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-041D7B PAYLOAD\n-\n-042476 DATA DESCRIPTOR       08074B50 (134695760)\n-04247A CRC                   10E7267F (283584127)\n-04247E Compressed Size       000006FB (1787)\n-042482 Uncompressed Size     000006FB (1787)\n-\n-042486 LOCAL HEADER #132     04034B50 (67324752)\n-04248A Extract Zip Spec      14 (20) '2.0'\n-04248B Extract OS            00 (0) 'MS-DOS'\n-04248C General Purpose Flag  0000 (0)\n-04248E Compression Method    0000 (0) 'Stored'\n-042490 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042494 CRC                   00000000 (0)\n-042498 Compressed Size       00000000 (0)\n-04249C Uncompressed Size     00000000 (0)\n-0424A0 Filename Length       007B (123)\n-0424A2 Extra Length          0009 (9)\n-0424A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x424A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04251F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042521   Length              0005 (5)\n-042523   Flags               01 (1) 'Modification'\n-042524   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-042528 LOCAL HEADER #133     04034B50 (67324752)\n-04252C Extract Zip Spec      14 (20) '2.0'\n-04252D Extract OS            00 (0) 'MS-DOS'\n-04252E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-042530 Compression Method    0000 (0) 'Stored'\n-042532 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042536 CRC                   00000000 (0)\n-04253A Compressed Size       00000000 (0)\n-04253E Uncompressed Size     00000000 (0)\n-042542 Filename Length       0091 (145)\n-042544 Extra Length          0009 (9)\n-042546 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+041D09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+041D0B   Length              0005 (5)\n+041D0D   Flags               01 (1) 'Modification'\n+041D0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+041D12 PAYLOAD\n+\n+04240D DATA DESCRIPTOR       08074B50 (134695760)\n+042411 CRC                   10E7267F (283584127)\n+042415 Compressed Size       000006FB (1787)\n+042419 Uncompressed Size     000006FB (1787)\n+\n+04241D LOCAL HEADER #132     04034B50 (67324752)\n+042421 Extract Zip Spec      14 (20) '2.0'\n+042422 Extract OS            00 (0) 'MS-DOS'\n+042423 General Purpose Flag  0000 (0)\n+042425 Compression Method    0000 (0) 'Stored'\n+042427 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04242B CRC                   00000000 (0)\n+04242F Compressed Size       00000000 (0)\n+042433 Uncompressed Size     00000000 (0)\n+042437 Filename Length       007B (123)\n+042439 Extra Length          0009 (9)\n+04243B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4243B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0424B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0424B8   Length              0005 (5)\n+0424BA   Flags               01 (1) 'Modification'\n+0424BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0424BF LOCAL HEADER #133     04034B50 (67324752)\n+0424C3 Extract Zip Spec      14 (20) '2.0'\n+0424C4 Extract OS            00 (0) 'MS-DOS'\n+0424C5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0424C7 Compression Method    0000 (0) 'Stored'\n+0424C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0424CD CRC                   00000000 (0)\n+0424D1 Compressed Size       00000000 (0)\n+0424D5 Uncompressed Size     00000000 (0)\n+0424D9 Filename Length       0091 (145)\n+0424DB Extra Length          0009 (9)\n+0424DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x42546: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x424DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0425D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0425D9   Length              0005 (5)\n-0425DB   Flags               01 (1) 'Modification'\n-0425DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0425E0 PAYLOAD\n-\n-042CDF DATA DESCRIPTOR       08074B50 (134695760)\n-042CE3 CRC                   24E47A3B (618953275)\n-042CE7 Compressed Size       000006FF (1791)\n-042CEB Uncompressed Size     000006FF (1791)\n-\n-042CEF LOCAL HEADER #134     04034B50 (67324752)\n-042CF3 Extract Zip Spec      14 (20) '2.0'\n-042CF4 Extract OS            00 (0) 'MS-DOS'\n-042CF5 General Purpose Flag  0000 (0)\n-042CF7 Compression Method    0000 (0) 'Stored'\n-042CF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042CFD CRC                   00000000 (0)\n-042D01 Compressed Size       00000000 (0)\n-042D05 Uncompressed Size     00000000 (0)\n-042D09 Filename Length       0076 (118)\n-042D0B Extra Length          0009 (9)\n-042D0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42D0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-042D83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042D85   Length              0005 (5)\n-042D87   Flags               01 (1) 'Modification'\n-042D88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-042D8C LOCAL HEADER #135     04034B50 (67324752)\n-042D90 Extract Zip Spec      14 (20) '2.0'\n-042D91 Extract OS            00 (0) 'MS-DOS'\n-042D92 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-042D94 Compression Method    0000 (0) 'Stored'\n-042D96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-042D9A CRC                   00000000 (0)\n-042D9E Compressed Size       00000000 (0)\n-042DA2 Uncompressed Size     00000000 (0)\n-042DA6 Filename Length       008C (140)\n-042DA8 Extra Length          0009 (9)\n-042DAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04256E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042570   Length              0005 (5)\n+042572   Flags               01 (1) 'Modification'\n+042573   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+042577 PAYLOAD\n+\n+042C76 DATA DESCRIPTOR       08074B50 (134695760)\n+042C7A CRC                   24E47A3B (618953275)\n+042C7E Compressed Size       000006FF (1791)\n+042C82 Uncompressed Size     000006FF (1791)\n+\n+042C86 LOCAL HEADER #134     04034B50 (67324752)\n+042C8A Extract Zip Spec      14 (20) '2.0'\n+042C8B Extract OS            00 (0) 'MS-DOS'\n+042C8C General Purpose Flag  0000 (0)\n+042C8E Compression Method    0000 (0) 'Stored'\n+042C90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042C94 CRC                   00000000 (0)\n+042C98 Compressed Size       00000000 (0)\n+042C9C Uncompressed Size     00000000 (0)\n+042CA0 Filename Length       0076 (118)\n+042CA2 Extra Length          0009 (9)\n+042CA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x42CA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+042D1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042D1C   Length              0005 (5)\n+042D1E   Flags               01 (1) 'Modification'\n+042D1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+042D23 LOCAL HEADER #135     04034B50 (67324752)\n+042D27 Extract Zip Spec      14 (20) '2.0'\n+042D28 Extract OS            00 (0) 'MS-DOS'\n+042D29 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+042D2B Compression Method    0000 (0) 'Stored'\n+042D2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+042D31 CRC                   00000000 (0)\n+042D35 Compressed Size       00000000 (0)\n+042D39 Uncompressed Size     00000000 (0)\n+042D3D Filename Length       008C (140)\n+042D3F Extra Length          0009 (9)\n+042D41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x42DAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x42D41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-042E36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-042E38   Length              0005 (5)\n-042E3A   Flags               01 (1) 'Modification'\n-042E3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-042E3F PAYLOAD\n-\n-0441A3 DATA DESCRIPTOR       08074B50 (134695760)\n-0441A7 CRC                   042BB565 (69973349)\n-0441AB Compressed Size       00001364 (4964)\n-0441AF Uncompressed Size     00001364 (4964)\n-\n-0441B3 LOCAL HEADER #136     04034B50 (67324752)\n-0441B7 Extract Zip Spec      14 (20) '2.0'\n-0441B8 Extract OS            00 (0) 'MS-DOS'\n-0441B9 General Purpose Flag  0000 (0)\n-0441BB Compression Method    0000 (0) 'Stored'\n-0441BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0441C1 CRC                   00000000 (0)\n-0441C5 Compressed Size       00000000 (0)\n-0441C9 Uncompressed Size     00000000 (0)\n-0441CD Filename Length       0077 (119)\n-0441CF Extra Length          0009 (9)\n-0441D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x441D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-044248 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04424A   Length              0005 (5)\n-04424C   Flags               01 (1) 'Modification'\n-04424D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-044251 LOCAL HEADER #137     04034B50 (67324752)\n-044255 Extract Zip Spec      14 (20) '2.0'\n-044256 Extract OS            00 (0) 'MS-DOS'\n-044257 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-044259 Compression Method    0000 (0) 'Stored'\n-04425B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04425F CRC                   00000000 (0)\n-044263 Compressed Size       00000000 (0)\n-044267 Uncompressed Size     00000000 (0)\n-04426B Filename Length       008D (141)\n-04426D Extra Length          0009 (9)\n-04426F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+042DCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+042DCF   Length              0005 (5)\n+042DD1   Flags               01 (1) 'Modification'\n+042DD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+042DD6 PAYLOAD\n+\n+04413A DATA DESCRIPTOR       08074B50 (134695760)\n+04413E CRC                   042BB565 (69973349)\n+044142 Compressed Size       00001364 (4964)\n+044146 Uncompressed Size     00001364 (4964)\n+\n+04414A LOCAL HEADER #136     04034B50 (67324752)\n+04414E Extract Zip Spec      14 (20) '2.0'\n+04414F Extract OS            00 (0) 'MS-DOS'\n+044150 General Purpose Flag  0000 (0)\n+044152 Compression Method    0000 (0) 'Stored'\n+044154 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+044158 CRC                   00000000 (0)\n+04415C Compressed Size       00000000 (0)\n+044160 Uncompressed Size     00000000 (0)\n+044164 Filename Length       0077 (119)\n+044166 Extra Length          0009 (9)\n+044168 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44168: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0441DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0441E1   Length              0005 (5)\n+0441E3   Flags               01 (1) 'Modification'\n+0441E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0441E8 LOCAL HEADER #137     04034B50 (67324752)\n+0441EC Extract Zip Spec      14 (20) '2.0'\n+0441ED Extract OS            00 (0) 'MS-DOS'\n+0441EE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0441F0 Compression Method    0000 (0) 'Stored'\n+0441F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0441F6 CRC                   00000000 (0)\n+0441FA Compressed Size       00000000 (0)\n+0441FE Uncompressed Size     00000000 (0)\n+044202 Filename Length       008D (141)\n+044204 Extra Length          0009 (9)\n+044206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x4426F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x44206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0442FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0442FE   Length              0005 (5)\n-044300   Flags               01 (1) 'Modification'\n-044301   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-044305 PAYLOAD\n-\n-0456C5 DATA DESCRIPTOR       08074B50 (134695760)\n-0456C9 CRC                   7A63232B (2053317419)\n-0456CD Compressed Size       000013C0 (5056)\n-0456D1 Uncompressed Size     000013C0 (5056)\n-\n-0456D5 LOCAL HEADER #138     04034B50 (67324752)\n-0456D9 Extract Zip Spec      14 (20) '2.0'\n-0456DA Extract OS            00 (0) 'MS-DOS'\n-0456DB General Purpose Flag  0000 (0)\n-0456DD Compression Method    0000 (0) 'Stored'\n-0456DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0456E3 CRC                   00000000 (0)\n-0456E7 Compressed Size       00000000 (0)\n-0456EB Uncompressed Size     00000000 (0)\n-0456EF Filename Length       0026 (38)\n-0456F1 Extra Length          0009 (9)\n-0456F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x456F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-045719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04571B   Length              0005 (5)\n-04571D   Flags               01 (1) 'Modification'\n-04571E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-045722 LOCAL HEADER #139     04034B50 (67324752)\n-045726 Extract Zip Spec      14 (20) '2.0'\n-045727 Extract OS            00 (0) 'MS-DOS'\n-045728 General Purpose Flag  0000 (0)\n-04572A Compression Method    0000 (0) 'Stored'\n-04572C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-045730 CRC                   00000000 (0)\n-045734 Compressed Size       00000000 (0)\n-045738 Uncompressed Size     00000000 (0)\n-04573C Filename Length       002F (47)\n-04573E Extra Length          0009 (9)\n-045740 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x45740: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04576F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045771   Length              0005 (5)\n-045773   Flags               01 (1) 'Modification'\n-045774   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-045778 LOCAL HEADER #140     04034B50 (67324752)\n-04577C Extract Zip Spec      14 (20) '2.0'\n-04577D Extract OS            00 (0) 'MS-DOS'\n-04577E General Purpose Flag  0000 (0)\n-045780 Compression Method    0000 (0) 'Stored'\n-045782 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-045786 CRC                   00000000 (0)\n-04578A Compressed Size       00000000 (0)\n-04578E Uncompressed Size     00000000 (0)\n-045792 Filename Length       0060 (96)\n-045794 Extra Length          0009 (9)\n-045796 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x45796: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0457F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0457F8   Length              0005 (5)\n-0457FA   Flags               01 (1) 'Modification'\n-0457FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0457FF LOCAL HEADER #141     04034B50 (67324752)\n-045803 Extract Zip Spec      14 (20) '2.0'\n-045804 Extract OS            00 (0) 'MS-DOS'\n-045805 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-045807 Compression Method    0000 (0) 'Stored'\n-045809 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04580D CRC                   00000000 (0)\n-045811 Compressed Size       00000000 (0)\n-045815 Uncompressed Size     00000000 (0)\n-045819 Filename Length       0076 (118)\n-04581B Extra Length          0009 (9)\n-04581D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4581D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-045893 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-045895   Length              0005 (5)\n-045897   Flags               01 (1) 'Modification'\n-045898   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04589C PAYLOAD\n-\n-0461CA DATA DESCRIPTOR       08074B50 (134695760)\n-0461CE CRC                   19888393 (428376979)\n-0461D2 Compressed Size       0000092E (2350)\n-0461D6 Uncompressed Size     0000092E (2350)\n-\n-0461DA LOCAL HEADER #142     04034B50 (67324752)\n-0461DE Extract Zip Spec      14 (20) '2.0'\n-0461DF Extract OS            00 (0) 'MS-DOS'\n-0461E0 General Purpose Flag  0000 (0)\n-0461E2 Compression Method    0000 (0) 'Stored'\n-0461E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0461E8 CRC                   00000000 (0)\n-0461EC Compressed Size       00000000 (0)\n-0461F0 Uncompressed Size     00000000 (0)\n-0461F4 Filename Length       0026 (38)\n-0461F6 Extra Length          0009 (9)\n-0461F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x461F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04621E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046220   Length              0005 (5)\n-046222   Flags               01 (1) 'Modification'\n-046223   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-046227 LOCAL HEADER #143     04034B50 (67324752)\n-04622B Extract Zip Spec      14 (20) '2.0'\n-04622C Extract OS            00 (0) 'MS-DOS'\n-04622D General Purpose Flag  0000 (0)\n-04622F Compression Method    0000 (0) 'Stored'\n-046231 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046235 CRC                   00000000 (0)\n-046239 Compressed Size       00000000 (0)\n-04623D Uncompressed Size     00000000 (0)\n-046241 Filename Length       002F (47)\n-046243 Extra Length          0009 (9)\n-046245 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46245: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046274 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046276   Length              0005 (5)\n-046278   Flags               01 (1) 'Modification'\n-046279   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04627D LOCAL HEADER #144     04034B50 (67324752)\n-046281 Extract Zip Spec      14 (20) '2.0'\n-046282 Extract OS            00 (0) 'MS-DOS'\n-046283 General Purpose Flag  0000 (0)\n-046285 Compression Method    0000 (0) 'Stored'\n-046287 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04628B CRC                   00000000 (0)\n-04628F Compressed Size       00000000 (0)\n-046293 Uncompressed Size     00000000 (0)\n-046297 Filename Length       0066 (102)\n-046299 Extra Length          0009 (9)\n-04629B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4629B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-046301 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-046303   Length              0005 (5)\n-046305   Flags               01 (1) 'Modification'\n-046306   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04630A LOCAL HEADER #145     04034B50 (67324752)\n-04630E Extract Zip Spec      14 (20) '2.0'\n-04630F Extract OS            00 (0) 'MS-DOS'\n-046310 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-046312 Compression Method    0000 (0) 'Stored'\n-046314 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-046318 CRC                   00000000 (0)\n-04631C Compressed Size       00000000 (0)\n-046320 Uncompressed Size     00000000 (0)\n-046324 Filename Length       007C (124)\n-046326 Extra Length          0009 (9)\n-046328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0463A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0463A6   Length              0005 (5)\n-0463A8   Flags               01 (1) 'Modification'\n-0463A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0463AD PAYLOAD\n-\n-04843E DATA DESCRIPTOR       08074B50 (134695760)\n-048442 CRC                   8B1E3BB7 (2334014391)\n-048446 Compressed Size       00002091 (8337)\n-04844A Uncompressed Size     00002091 (8337)\n-\n-04844E LOCAL HEADER #146     04034B50 (67324752)\n-048452 Extract Zip Spec      14 (20) '2.0'\n-048453 Extract OS            00 (0) 'MS-DOS'\n-048454 General Purpose Flag  0000 (0)\n-048456 Compression Method    0000 (0) 'Stored'\n-048458 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04845C CRC                   00000000 (0)\n-048460 Compressed Size       00000000 (0)\n-048464 Uncompressed Size     00000000 (0)\n-048468 Filename Length       002E (46)\n-04846A Extra Length          0009 (9)\n-04846C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4846C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04849A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04849C   Length              0005 (5)\n-04849E   Flags               01 (1) 'Modification'\n-04849F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0484A3 LOCAL HEADER #147     04034B50 (67324752)\n-0484A7 Extract Zip Spec      14 (20) '2.0'\n-0484A8 Extract OS            00 (0) 'MS-DOS'\n-0484A9 General Purpose Flag  0000 (0)\n-0484AB Compression Method    0000 (0) 'Stored'\n-0484AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0484B1 CRC                   00000000 (0)\n-0484B5 Compressed Size       00000000 (0)\n-0484B9 Uncompressed Size     00000000 (0)\n-0484BD Filename Length       0037 (55)\n-0484BF Extra Length          0009 (9)\n-0484C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x484C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0484F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0484FA   Length              0005 (5)\n-0484FC   Flags               01 (1) 'Modification'\n-0484FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-048501 LOCAL HEADER #148     04034B50 (67324752)\n-048505 Extract Zip Spec      14 (20) '2.0'\n-048506 Extract OS            00 (0) 'MS-DOS'\n-048507 General Purpose Flag  0000 (0)\n-048509 Compression Method    0000 (0) 'Stored'\n-04850B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04850F CRC                   00000000 (0)\n-048513 Compressed Size       00000000 (0)\n-048517 Uncompressed Size     00000000 (0)\n-04851B Filename Length       007B (123)\n-04851D Extra Length          0009 (9)\n-04851F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4851F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04859A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04859C   Length              0005 (5)\n-04859E   Flags               01 (1) 'Modification'\n-04859F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0485A3 LOCAL HEADER #149     04034B50 (67324752)\n-0485A7 Extract Zip Spec      14 (20) '2.0'\n-0485A8 Extract OS            00 (0) 'MS-DOS'\n-0485A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0485AB Compression Method    0000 (0) 'Stored'\n-0485AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0485B1 CRC                   00000000 (0)\n-0485B5 Compressed Size       00000000 (0)\n-0485B9 Uncompressed Size     00000000 (0)\n-0485BD Filename Length       0091 (145)\n-0485BF Extra Length          0009 (9)\n-0485C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+044293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+044295   Length              0005 (5)\n+044297   Flags               01 (1) 'Modification'\n+044298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04429C PAYLOAD\n+\n+04565C DATA DESCRIPTOR       08074B50 (134695760)\n+045660 CRC                   7A63232B (2053317419)\n+045664 Compressed Size       000013C0 (5056)\n+045668 Uncompressed Size     000013C0 (5056)\n+\n+04566C LOCAL HEADER #138     04034B50 (67324752)\n+045670 Extract Zip Spec      14 (20) '2.0'\n+045671 Extract OS            00 (0) 'MS-DOS'\n+045672 General Purpose Flag  0000 (0)\n+045674 Compression Method    0000 (0) 'Stored'\n+045676 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04567A CRC                   00000000 (0)\n+04567E Compressed Size       00000000 (0)\n+045682 Uncompressed Size     00000000 (0)\n+045686 Filename Length       0026 (38)\n+045688 Extra Length          0009 (9)\n+04568A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4568A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0456B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0456B2   Length              0005 (5)\n+0456B4   Flags               01 (1) 'Modification'\n+0456B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0456B9 LOCAL HEADER #139     04034B50 (67324752)\n+0456BD Extract Zip Spec      14 (20) '2.0'\n+0456BE Extract OS            00 (0) 'MS-DOS'\n+0456BF General Purpose Flag  0000 (0)\n+0456C1 Compression Method    0000 (0) 'Stored'\n+0456C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0456C7 CRC                   00000000 (0)\n+0456CB Compressed Size       00000000 (0)\n+0456CF Uncompressed Size     00000000 (0)\n+0456D3 Filename Length       002F (47)\n+0456D5 Extra Length          0009 (9)\n+0456D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x456D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+045706 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+045708   Length              0005 (5)\n+04570A   Flags               01 (1) 'Modification'\n+04570B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04570F LOCAL HEADER #140     04034B50 (67324752)\n+045713 Extract Zip Spec      14 (20) '2.0'\n+045714 Extract OS            00 (0) 'MS-DOS'\n+045715 General Purpose Flag  0000 (0)\n+045717 Compression Method    0000 (0) 'Stored'\n+045719 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04571D CRC                   00000000 (0)\n+045721 Compressed Size       00000000 (0)\n+045725 Uncompressed Size     00000000 (0)\n+045729 Filename Length       0060 (96)\n+04572B Extra Length          0009 (9)\n+04572D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4572D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04578D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04578F   Length              0005 (5)\n+045791   Flags               01 (1) 'Modification'\n+045792   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+045796 LOCAL HEADER #141     04034B50 (67324752)\n+04579A Extract Zip Spec      14 (20) '2.0'\n+04579B Extract OS            00 (0) 'MS-DOS'\n+04579C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04579E Compression Method    0000 (0) 'Stored'\n+0457A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0457A4 CRC                   00000000 (0)\n+0457A8 Compressed Size       00000000 (0)\n+0457AC Uncompressed Size     00000000 (0)\n+0457B0 Filename Length       0076 (118)\n+0457B2 Extra Length          0009 (9)\n+0457B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x457B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04582A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04582C   Length              0005 (5)\n+04582E   Flags               01 (1) 'Modification'\n+04582F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+045833 PAYLOAD\n+\n+046161 DATA DESCRIPTOR       08074B50 (134695760)\n+046165 CRC                   19888393 (428376979)\n+046169 Compressed Size       0000092E (2350)\n+04616D Uncompressed Size     0000092E (2350)\n+\n+046171 LOCAL HEADER #142     04034B50 (67324752)\n+046175 Extract Zip Spec      14 (20) '2.0'\n+046176 Extract OS            00 (0) 'MS-DOS'\n+046177 General Purpose Flag  0000 (0)\n+046179 Compression Method    0000 (0) 'Stored'\n+04617B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04617F CRC                   00000000 (0)\n+046183 Compressed Size       00000000 (0)\n+046187 Uncompressed Size     00000000 (0)\n+04618B Filename Length       0026 (38)\n+04618D Extra Length          0009 (9)\n+04618F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4618F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0461B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0461B7   Length              0005 (5)\n+0461B9   Flags               01 (1) 'Modification'\n+0461BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0461BE LOCAL HEADER #143     04034B50 (67324752)\n+0461C2 Extract Zip Spec      14 (20) '2.0'\n+0461C3 Extract OS            00 (0) 'MS-DOS'\n+0461C4 General Purpose Flag  0000 (0)\n+0461C6 Compression Method    0000 (0) 'Stored'\n+0461C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0461CC CRC                   00000000 (0)\n+0461D0 Compressed Size       00000000 (0)\n+0461D4 Uncompressed Size     00000000 (0)\n+0461D8 Filename Length       002F (47)\n+0461DA Extra Length          0009 (9)\n+0461DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x461DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04620B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04620D   Length              0005 (5)\n+04620F   Flags               01 (1) 'Modification'\n+046210   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+046214 LOCAL HEADER #144     04034B50 (67324752)\n+046218 Extract Zip Spec      14 (20) '2.0'\n+046219 Extract OS            00 (0) 'MS-DOS'\n+04621A General Purpose Flag  0000 (0)\n+04621C Compression Method    0000 (0) 'Stored'\n+04621E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+046222 CRC                   00000000 (0)\n+046226 Compressed Size       00000000 (0)\n+04622A Uncompressed Size     00000000 (0)\n+04622E Filename Length       0066 (102)\n+046230 Extra Length          0009 (9)\n+046232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x46232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+046298 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04629A   Length              0005 (5)\n+04629C   Flags               01 (1) 'Modification'\n+04629D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0462A1 LOCAL HEADER #145     04034B50 (67324752)\n+0462A5 Extract Zip Spec      14 (20) '2.0'\n+0462A6 Extract OS            00 (0) 'MS-DOS'\n+0462A7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0462A9 Compression Method    0000 (0) 'Stored'\n+0462AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0462AF CRC                   00000000 (0)\n+0462B3 Compressed Size       00000000 (0)\n+0462B7 Uncompressed Size     00000000 (0)\n+0462BB Filename Length       007C (124)\n+0462BD Extra Length          0009 (9)\n+0462BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x462BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04633B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04633D   Length              0005 (5)\n+04633F   Flags               01 (1) 'Modification'\n+046340   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+046344 PAYLOAD\n+\n+0483D5 DATA DESCRIPTOR       08074B50 (134695760)\n+0483D9 CRC                   8B1E3BB7 (2334014391)\n+0483DD Compressed Size       00002091 (8337)\n+0483E1 Uncompressed Size     00002091 (8337)\n+\n+0483E5 LOCAL HEADER #146     04034B50 (67324752)\n+0483E9 Extract Zip Spec      14 (20) '2.0'\n+0483EA Extract OS            00 (0) 'MS-DOS'\n+0483EB General Purpose Flag  0000 (0)\n+0483ED Compression Method    0000 (0) 'Stored'\n+0483EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0483F3 CRC                   00000000 (0)\n+0483F7 Compressed Size       00000000 (0)\n+0483FB Uncompressed Size     00000000 (0)\n+0483FF Filename Length       002E (46)\n+048401 Extra Length          0009 (9)\n+048403 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x48403: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048431 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048433   Length              0005 (5)\n+048435   Flags               01 (1) 'Modification'\n+048436   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04843A LOCAL HEADER #147     04034B50 (67324752)\n+04843E Extract Zip Spec      14 (20) '2.0'\n+04843F Extract OS            00 (0) 'MS-DOS'\n+048440 General Purpose Flag  0000 (0)\n+048442 Compression Method    0000 (0) 'Stored'\n+048444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+048448 CRC                   00000000 (0)\n+04844C Compressed Size       00000000 (0)\n+048450 Uncompressed Size     00000000 (0)\n+048454 Filename Length       0037 (55)\n+048456 Extra Length          0009 (9)\n+048458 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x48458: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04848F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048491   Length              0005 (5)\n+048493   Flags               01 (1) 'Modification'\n+048494   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+048498 LOCAL HEADER #148     04034B50 (67324752)\n+04849C Extract Zip Spec      14 (20) '2.0'\n+04849D Extract OS            00 (0) 'MS-DOS'\n+04849E General Purpose Flag  0000 (0)\n+0484A0 Compression Method    0000 (0) 'Stored'\n+0484A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0484A6 CRC                   00000000 (0)\n+0484AA Compressed Size       00000000 (0)\n+0484AE Uncompressed Size     00000000 (0)\n+0484B2 Filename Length       007B (123)\n+0484B4 Extra Length          0009 (9)\n+0484B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x484B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+048531 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+048533   Length              0005 (5)\n+048535   Flags               01 (1) 'Modification'\n+048536   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04853A LOCAL HEADER #149     04034B50 (67324752)\n+04853E Extract Zip Spec      14 (20) '2.0'\n+04853F Extract OS            00 (0) 'MS-DOS'\n+048540 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+048542 Compression Method    0000 (0) 'Stored'\n+048544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+048548 CRC                   00000000 (0)\n+04854C Compressed Size       00000000 (0)\n+048550 Uncompressed Size     00000000 (0)\n+048554 Filename Length       0091 (145)\n+048556 Extra Length          0009 (9)\n+048558 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x485C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x48558: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-048652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-048654   Length              0005 (5)\n-048656   Flags               01 (1) 'Modification'\n-048657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04865B PAYLOAD\n-\n-04A0D6 DATA DESCRIPTOR       08074B50 (134695760)\n-04A0DA CRC                   0D142FFC (219426812)\n-04A0DE Compressed Size       00001A7B (6779)\n-04A0E2 Uncompressed Size     00001A7B (6779)\n-\n-04A0E6 LOCAL HEADER #150     04034B50 (67324752)\n-04A0EA Extract Zip Spec      14 (20) '2.0'\n-04A0EB Extract OS            00 (0) 'MS-DOS'\n-04A0EC General Purpose Flag  0000 (0)\n-04A0EE Compression Method    0000 (0) 'Stored'\n-04A0F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A0F4 CRC                   00000000 (0)\n-04A0F8 Compressed Size       00000000 (0)\n-04A0FC Uncompressed Size     00000000 (0)\n-04A100 Filename Length       0031 (49)\n-04A102 Extra Length          0009 (9)\n-04A104 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A104: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A135 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A137   Length              0005 (5)\n-04A139   Flags               01 (1) 'Modification'\n-04A13A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A13E LOCAL HEADER #151     04034B50 (67324752)\n-04A142 Extract Zip Spec      14 (20) '2.0'\n-04A143 Extract OS            00 (0) 'MS-DOS'\n-04A144 General Purpose Flag  0000 (0)\n-04A146 Compression Method    0000 (0) 'Stored'\n-04A148 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A14C CRC                   00000000 (0)\n-04A150 Compressed Size       00000000 (0)\n-04A154 Uncompressed Size     00000000 (0)\n-04A158 Filename Length       003A (58)\n-04A15A Extra Length          0009 (9)\n-04A15C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A15C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A196 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A198   Length              0005 (5)\n-04A19A   Flags               01 (1) 'Modification'\n-04A19B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A19F LOCAL HEADER #152     04034B50 (67324752)\n-04A1A3 Extract Zip Spec      14 (20) '2.0'\n-04A1A4 Extract OS            00 (0) 'MS-DOS'\n-04A1A5 General Purpose Flag  0000 (0)\n-04A1A7 Compression Method    0000 (0) 'Stored'\n-04A1A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A1AD CRC                   00000000 (0)\n-04A1B1 Compressed Size       00000000 (0)\n-04A1B5 Uncompressed Size     00000000 (0)\n-04A1B9 Filename Length       0081 (129)\n-04A1BB Extra Length          0009 (9)\n-04A1BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A1BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04A23E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A240   Length              0005 (5)\n-04A242   Flags               01 (1) 'Modification'\n-04A243   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04A247 LOCAL HEADER #153     04034B50 (67324752)\n-04A24B Extract Zip Spec      14 (20) '2.0'\n-04A24C Extract OS            00 (0) 'MS-DOS'\n-04A24D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04A24F Compression Method    0000 (0) 'Stored'\n-04A251 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04A255 CRC                   00000000 (0)\n-04A259 Compressed Size       00000000 (0)\n-04A25D Uncompressed Size     00000000 (0)\n-04A261 Filename Length       0097 (151)\n-04A263 Extra Length          0009 (9)\n-04A265 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0485E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0485EB   Length              0005 (5)\n+0485ED   Flags               01 (1) 'Modification'\n+0485EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0485F2 PAYLOAD\n+\n+04A06D DATA DESCRIPTOR       08074B50 (134695760)\n+04A071 CRC                   0D142FFC (219426812)\n+04A075 Compressed Size       00001A7B (6779)\n+04A079 Uncompressed Size     00001A7B (6779)\n+\n+04A07D LOCAL HEADER #150     04034B50 (67324752)\n+04A081 Extract Zip Spec      14 (20) '2.0'\n+04A082 Extract OS            00 (0) 'MS-DOS'\n+04A083 General Purpose Flag  0000 (0)\n+04A085 Compression Method    0000 (0) 'Stored'\n+04A087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A08B CRC                   00000000 (0)\n+04A08F Compressed Size       00000000 (0)\n+04A093 Uncompressed Size     00000000 (0)\n+04A097 Filename Length       0031 (49)\n+04A099 Extra Length          0009 (9)\n+04A09B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A09B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A0CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A0CE   Length              0005 (5)\n+04A0D0   Flags               01 (1) 'Modification'\n+04A0D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04A0D5 LOCAL HEADER #151     04034B50 (67324752)\n+04A0D9 Extract Zip Spec      14 (20) '2.0'\n+04A0DA Extract OS            00 (0) 'MS-DOS'\n+04A0DB General Purpose Flag  0000 (0)\n+04A0DD Compression Method    0000 (0) 'Stored'\n+04A0DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A0E3 CRC                   00000000 (0)\n+04A0E7 Compressed Size       00000000 (0)\n+04A0EB Uncompressed Size     00000000 (0)\n+04A0EF Filename Length       003A (58)\n+04A0F1 Extra Length          0009 (9)\n+04A0F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A0F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A12D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A12F   Length              0005 (5)\n+04A131   Flags               01 (1) 'Modification'\n+04A132   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04A136 LOCAL HEADER #152     04034B50 (67324752)\n+04A13A Extract Zip Spec      14 (20) '2.0'\n+04A13B Extract OS            00 (0) 'MS-DOS'\n+04A13C General Purpose Flag  0000 (0)\n+04A13E Compression Method    0000 (0) 'Stored'\n+04A140 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A144 CRC                   00000000 (0)\n+04A148 Compressed Size       00000000 (0)\n+04A14C Uncompressed Size     00000000 (0)\n+04A150 Filename Length       0081 (129)\n+04A152 Extra Length          0009 (9)\n+04A154 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A154: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04A1D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A1D7   Length              0005 (5)\n+04A1D9   Flags               01 (1) 'Modification'\n+04A1DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04A1DE LOCAL HEADER #153     04034B50 (67324752)\n+04A1E2 Extract Zip Spec      14 (20) '2.0'\n+04A1E3 Extract OS            00 (0) 'MS-DOS'\n+04A1E4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04A1E6 Compression Method    0000 (0) 'Stored'\n+04A1E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A1EC CRC                   00000000 (0)\n+04A1F0 Compressed Size       00000000 (0)\n+04A1F4 Uncompressed Size     00000000 (0)\n+04A1F8 Filename Length       0097 (151)\n+04A1FA Extra Length          0009 (9)\n+04A1FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A265: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A1FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04A2FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04A2FE   Length              0005 (5)\n-04A300   Flags               01 (1) 'Modification'\n-04A301   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04A305 PAYLOAD\n-\n-04AB8B DATA DESCRIPTOR       08074B50 (134695760)\n-04AB8F CRC                   726CFBF2 (1919745010)\n-04AB93 Compressed Size       00000886 (2182)\n-04AB97 Uncompressed Size     00000886 (2182)\n-\n-04AB9B LOCAL HEADER #154     04034B50 (67324752)\n-04AB9F Extract Zip Spec      14 (20) '2.0'\n-04ABA0 Extract OS            00 (0) 'MS-DOS'\n-04ABA1 General Purpose Flag  0000 (0)\n-04ABA3 Compression Method    0000 (0) 'Stored'\n-04ABA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04ABA9 CRC                   00000000 (0)\n-04ABAD Compressed Size       00000000 (0)\n-04ABB1 Uncompressed Size     00000000 (0)\n-04ABB5 Filename Length       0088 (136)\n-04ABB7 Extra Length          0009 (9)\n-04ABB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04A293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04A295   Length              0005 (5)\n+04A297   Flags               01 (1) 'Modification'\n+04A298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04A29C PAYLOAD\n+\n+04AB22 DATA DESCRIPTOR       08074B50 (134695760)\n+04AB26 CRC                   726CFBF2 (1919745010)\n+04AB2A Compressed Size       00000886 (2182)\n+04AB2E Uncompressed Size     00000886 (2182)\n+\n+04AB32 LOCAL HEADER #154     04034B50 (67324752)\n+04AB36 Extract Zip Spec      14 (20) '2.0'\n+04AB37 Extract OS            00 (0) 'MS-DOS'\n+04AB38 General Purpose Flag  0000 (0)\n+04AB3A Compression Method    0000 (0) 'Stored'\n+04AB3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04AB40 CRC                   00000000 (0)\n+04AB44 Compressed Size       00000000 (0)\n+04AB48 Uncompressed Size     00000000 (0)\n+04AB4C Filename Length       0088 (136)\n+04AB4E Extra Length          0009 (9)\n+04AB50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x4ABB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4AB50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04AC41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04AC43   Length              0005 (5)\n-04AC45   Flags               01 (1) 'Modification'\n-04AC46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04AC4A LOCAL HEADER #155     04034B50 (67324752)\n-04AC4E Extract Zip Spec      14 (20) '2.0'\n-04AC4F Extract OS            00 (0) 'MS-DOS'\n-04AC50 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04AC52 Compression Method    0000 (0) 'Stored'\n-04AC54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04AC58 CRC                   00000000 (0)\n-04AC5C Compressed Size       00000000 (0)\n-04AC60 Uncompressed Size     00000000 (0)\n-04AC64 Filename Length       009E (158)\n-04AC66 Extra Length          0009 (9)\n-04AC68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04ABD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04ABDA   Length              0005 (5)\n+04ABDC   Flags               01 (1) 'Modification'\n+04ABDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04ABE1 LOCAL HEADER #155     04034B50 (67324752)\n+04ABE5 Extract Zip Spec      14 (20) '2.0'\n+04ABE6 Extract OS            00 (0) 'MS-DOS'\n+04ABE7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04ABE9 Compression Method    0000 (0) 'Stored'\n+04ABEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04ABEF CRC                   00000000 (0)\n+04ABF3 Compressed Size       00000000 (0)\n+04ABF7 Uncompressed Size     00000000 (0)\n+04ABFB Filename Length       009E (158)\n+04ABFD Extra Length          0009 (9)\n+04ABFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4AC68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4ABFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04AD06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04AD08   Length              0005 (5)\n-04AD0A   Flags               01 (1) 'Modification'\n-04AD0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04AD0F PAYLOAD\n-\n-04BD80 DATA DESCRIPTOR       08074B50 (134695760)\n-04BD84 CRC                   0124A640 (19179072)\n-04BD88 Compressed Size       00001071 (4209)\n-04BD8C Uncompressed Size     00001071 (4209)\n-\n-04BD90 LOCAL HEADER #156     04034B50 (67324752)\n-04BD94 Extract Zip Spec      14 (20) '2.0'\n-04BD95 Extract OS            00 (0) 'MS-DOS'\n-04BD96 General Purpose Flag  0000 (0)\n-04BD98 Compression Method    0000 (0) 'Stored'\n-04BD9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BD9E CRC                   00000000 (0)\n-04BDA2 Compressed Size       00000000 (0)\n-04BDA6 Uncompressed Size     00000000 (0)\n-04BDAA Filename Length       0088 (136)\n-04BDAC Extra Length          0009 (9)\n-04BDAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04AC9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04AC9F   Length              0005 (5)\n+04ACA1   Flags               01 (1) 'Modification'\n+04ACA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04ACA6 PAYLOAD\n+\n+04BD17 DATA DESCRIPTOR       08074B50 (134695760)\n+04BD1B CRC                   0124A640 (19179072)\n+04BD1F Compressed Size       00001071 (4209)\n+04BD23 Uncompressed Size     00001071 (4209)\n+\n+04BD27 LOCAL HEADER #156     04034B50 (67324752)\n+04BD2B Extract Zip Spec      14 (20) '2.0'\n+04BD2C Extract OS            00 (0) 'MS-DOS'\n+04BD2D General Purpose Flag  0000 (0)\n+04BD2F Compression Method    0000 (0) 'Stored'\n+04BD31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BD35 CRC                   00000000 (0)\n+04BD39 Compressed Size       00000000 (0)\n+04BD3D Uncompressed Size     00000000 (0)\n+04BD41 Filename Length       0088 (136)\n+04BD43 Extra Length          0009 (9)\n+04BD45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x4BDAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4BD45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04BE36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BE38   Length              0005 (5)\n-04BE3A   Flags               01 (1) 'Modification'\n-04BE3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BE3F LOCAL HEADER #157     04034B50 (67324752)\n-04BE43 Extract Zip Spec      14 (20) '2.0'\n-04BE44 Extract OS            00 (0) 'MS-DOS'\n-04BE45 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04BE47 Compression Method    0000 (0) 'Stored'\n-04BE49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BE4D CRC                   00000000 (0)\n-04BE51 Compressed Size       00000000 (0)\n-04BE55 Uncompressed Size     00000000 (0)\n-04BE59 Filename Length       009E (158)\n-04BE5B Extra Length          0009 (9)\n-04BE5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04BDCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BDCF   Length              0005 (5)\n+04BDD1   Flags               01 (1) 'Modification'\n+04BDD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04BDD6 LOCAL HEADER #157     04034B50 (67324752)\n+04BDDA Extract Zip Spec      14 (20) '2.0'\n+04BDDB Extract OS            00 (0) 'MS-DOS'\n+04BDDC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04BDDE Compression Method    0000 (0) 'Stored'\n+04BDE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BDE4 CRC                   00000000 (0)\n+04BDE8 Compressed Size       00000000 (0)\n+04BDEC Uncompressed Size     00000000 (0)\n+04BDF0 Filename Length       009E (158)\n+04BDF2 Extra Length          0009 (9)\n+04BDF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4BE5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4BDF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04BEFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BEFD   Length              0005 (5)\n-04BEFF   Flags               01 (1) 'Modification'\n-04BF00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04BF04 PAYLOAD\n-\n-04C7D0 DATA DESCRIPTOR       08074B50 (134695760)\n-04C7D4 CRC                   7E793C9C (2121874588)\n-04C7D8 Compressed Size       000008CC (2252)\n-04C7DC Uncompressed Size     000008CC (2252)\n-\n-04C7E0 LOCAL HEADER #158     04034B50 (67324752)\n-04C7E4 Extract Zip Spec      14 (20) '2.0'\n-04C7E5 Extract OS            00 (0) 'MS-DOS'\n-04C7E6 General Purpose Flag  0000 (0)\n-04C7E8 Compression Method    0000 (0) 'Stored'\n-04C7EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04C7EE CRC                   00000000 (0)\n-04C7F2 Compressed Size       00000000 (0)\n-04C7F6 Uncompressed Size     00000000 (0)\n-04C7FA Filename Length       0026 (38)\n-04C7FC Extra Length          0009 (9)\n-04C7FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C7FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C824 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C826   Length              0005 (5)\n-04C828   Flags               01 (1) 'Modification'\n-04C829   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04C82D LOCAL HEADER #159     04034B50 (67324752)\n-04C831 Extract Zip Spec      14 (20) '2.0'\n-04C832 Extract OS            00 (0) 'MS-DOS'\n-04C833 General Purpose Flag  0000 (0)\n-04C835 Compression Method    0000 (0) 'Stored'\n-04C837 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04C83B CRC                   00000000 (0)\n-04C83F Compressed Size       00000000 (0)\n-04C843 Uncompressed Size     00000000 (0)\n-04C847 Filename Length       002F (47)\n-04C849 Extra Length          0009 (9)\n-04C84B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C84B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C87A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C87C   Length              0005 (5)\n-04C87E   Flags               01 (1) 'Modification'\n-04C87F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04C883 LOCAL HEADER #160     04034B50 (67324752)\n-04C887 Extract Zip Spec      14 (20) '2.0'\n-04C888 Extract OS            00 (0) 'MS-DOS'\n-04C889 General Purpose Flag  0000 (0)\n-04C88B Compression Method    0000 (0) 'Stored'\n-04C88D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04C891 CRC                   00000000 (0)\n-04C895 Compressed Size       00000000 (0)\n-04C899 Uncompressed Size     00000000 (0)\n-04C89D Filename Length       005D (93)\n-04C89F Extra Length          0009 (9)\n-04C8A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C8A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C8FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C900   Length              0005 (5)\n-04C902   Flags               01 (1) 'Modification'\n-04C903   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04C907 LOCAL HEADER #161     04034B50 (67324752)\n-04C90B Extract Zip Spec      14 (20) '2.0'\n-04C90C Extract OS            00 (0) 'MS-DOS'\n-04C90D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04C90F Compression Method    0000 (0) 'Stored'\n-04C911 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04C915 CRC                   00000000 (0)\n-04C919 Compressed Size       00000000 (0)\n-04C91D Uncompressed Size     00000000 (0)\n-04C921 Filename Length       0073 (115)\n-04C923 Extra Length          0009 (9)\n-04C925 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4C925: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C998 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C99A   Length              0005 (5)\n-04C99C   Flags               01 (1) 'Modification'\n-04C99D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04C9A1 PAYLOAD\n-\n-04D202 DATA DESCRIPTOR       08074B50 (134695760)\n-04D206 CRC                   4C048087 (1275363463)\n-04D20A Compressed Size       00000861 (2145)\n-04D20E Uncompressed Size     00000861 (2145)\n-\n-04D212 LOCAL HEADER #162     04034B50 (67324752)\n-04D216 Extract Zip Spec      14 (20) '2.0'\n-04D217 Extract OS            00 (0) 'MS-DOS'\n-04D218 General Purpose Flag  0000 (0)\n-04D21A Compression Method    0000 (0) 'Stored'\n-04D21C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D220 CRC                   00000000 (0)\n-04D224 Compressed Size       00000000 (0)\n-04D228 Uncompressed Size     00000000 (0)\n-04D22C Filename Length       002D (45)\n-04D22E Extra Length          0009 (9)\n-04D230 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D230: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D25D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D25F   Length              0005 (5)\n-04D261   Flags               01 (1) 'Modification'\n-04D262   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D266 LOCAL HEADER #163     04034B50 (67324752)\n-04D26A Extract Zip Spec      14 (20) '2.0'\n-04D26B Extract OS            00 (0) 'MS-DOS'\n-04D26C General Purpose Flag  0000 (0)\n-04D26E Compression Method    0000 (0) 'Stored'\n-04D270 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D274 CRC                   00000000 (0)\n-04D278 Compressed Size       00000000 (0)\n-04D27C Uncompressed Size     00000000 (0)\n-04D280 Filename Length       0036 (54)\n-04D282 Extra Length          0009 (9)\n-04D284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D2BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D2BC   Length              0005 (5)\n-04D2BE   Flags               01 (1) 'Modification'\n-04D2BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D2C3 LOCAL HEADER #164     04034B50 (67324752)\n-04D2C7 Extract Zip Spec      14 (20) '2.0'\n-04D2C8 Extract OS            00 (0) 'MS-DOS'\n-04D2C9 General Purpose Flag  0000 (0)\n-04D2CB Compression Method    0000 (0) 'Stored'\n-04D2CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D2D1 CRC                   00000000 (0)\n-04D2D5 Compressed Size       00000000 (0)\n-04D2D9 Uncompressed Size     00000000 (0)\n-04D2DD Filename Length       006A (106)\n-04D2DF Extra Length          0009 (9)\n-04D2E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D2E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D34B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D34D   Length              0005 (5)\n-04D34F   Flags               01 (1) 'Modification'\n-04D350   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04D354 LOCAL HEADER #165     04034B50 (67324752)\n-04D358 Extract Zip Spec      14 (20) '2.0'\n-04D359 Extract OS            00 (0) 'MS-DOS'\n-04D35A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04D35C Compression Method    0000 (0) 'Stored'\n-04D35E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04D362 CRC                   00000000 (0)\n-04D366 Compressed Size       00000000 (0)\n-04D36A Uncompressed Size     00000000 (0)\n-04D36E Filename Length       0080 (128)\n-04D370 Extra Length          0009 (9)\n-04D372 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D372: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04D3F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04D3F4   Length              0005 (5)\n-04D3F6   Flags               01 (1) 'Modification'\n-04D3F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04D3FB PAYLOAD\n-\n-04F559 DATA DESCRIPTOR       08074B50 (134695760)\n-04F55D CRC                   877B2EE8 (2272997096)\n-04F561 Compressed Size       0000215E (8542)\n-04F565 Uncompressed Size     0000215E (8542)\n-\n-04F569 LOCAL HEADER #166     04034B50 (67324752)\n-04F56D Extract Zip Spec      14 (20) '2.0'\n-04F56E Extract OS            00 (0) 'MS-DOS'\n-04F56F General Purpose Flag  0000 (0)\n-04F571 Compression Method    0000 (0) 'Stored'\n-04F573 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F577 CRC                   00000000 (0)\n-04F57B Compressed Size       00000000 (0)\n-04F57F Uncompressed Size     00000000 (0)\n-04F583 Filename Length       006E (110)\n-04F585 Extra Length          0009 (9)\n-04F587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4F587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04F5F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F5F7   Length              0005 (5)\n-04F5F9   Flags               01 (1) 'Modification'\n-04F5FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04F5FE LOCAL HEADER #167     04034B50 (67324752)\n-04F602 Extract Zip Spec      14 (20) '2.0'\n-04F603 Extract OS            00 (0) 'MS-DOS'\n-04F604 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-04F606 Compression Method    0000 (0) 'Stored'\n-04F608 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04F60C CRC                   00000000 (0)\n-04F610 Compressed Size       00000000 (0)\n-04F614 Uncompressed Size     00000000 (0)\n-04F618 Filename Length       0084 (132)\n-04F61A Extra Length          0009 (9)\n-04F61C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04BE92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BE94   Length              0005 (5)\n+04BE96   Flags               01 (1) 'Modification'\n+04BE97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04BE9B PAYLOAD\n+\n+04C767 DATA DESCRIPTOR       08074B50 (134695760)\n+04C76B CRC                   7E793C9C (2121874588)\n+04C76F Compressed Size       000008CC (2252)\n+04C773 Uncompressed Size     000008CC (2252)\n+\n+04C777 LOCAL HEADER #158     04034B50 (67324752)\n+04C77B Extract Zip Spec      14 (20) '2.0'\n+04C77C Extract OS            00 (0) 'MS-DOS'\n+04C77D General Purpose Flag  0000 (0)\n+04C77F Compression Method    0000 (0) 'Stored'\n+04C781 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04C785 CRC                   00000000 (0)\n+04C789 Compressed Size       00000000 (0)\n+04C78D Uncompressed Size     00000000 (0)\n+04C791 Filename Length       0026 (38)\n+04C793 Extra Length          0009 (9)\n+04C795 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C795: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04C7BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04C7BD   Length              0005 (5)\n+04C7BF   Flags               01 (1) 'Modification'\n+04C7C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04C7C4 LOCAL HEADER #159     04034B50 (67324752)\n+04C7C8 Extract Zip Spec      14 (20) '2.0'\n+04C7C9 Extract OS            00 (0) 'MS-DOS'\n+04C7CA General Purpose Flag  0000 (0)\n+04C7CC Compression Method    0000 (0) 'Stored'\n+04C7CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04C7D2 CRC                   00000000 (0)\n+04C7D6 Compressed Size       00000000 (0)\n+04C7DA Uncompressed Size     00000000 (0)\n+04C7DE Filename Length       002F (47)\n+04C7E0 Extra Length          0009 (9)\n+04C7E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C7E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04C811 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04C813   Length              0005 (5)\n+04C815   Flags               01 (1) 'Modification'\n+04C816   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04C81A LOCAL HEADER #160     04034B50 (67324752)\n+04C81E Extract Zip Spec      14 (20) '2.0'\n+04C81F Extract OS            00 (0) 'MS-DOS'\n+04C820 General Purpose Flag  0000 (0)\n+04C822 Compression Method    0000 (0) 'Stored'\n+04C824 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04C828 CRC                   00000000 (0)\n+04C82C Compressed Size       00000000 (0)\n+04C830 Uncompressed Size     00000000 (0)\n+04C834 Filename Length       005D (93)\n+04C836 Extra Length          0009 (9)\n+04C838 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C838: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04C895 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04C897   Length              0005 (5)\n+04C899   Flags               01 (1) 'Modification'\n+04C89A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04C89E LOCAL HEADER #161     04034B50 (67324752)\n+04C8A2 Extract Zip Spec      14 (20) '2.0'\n+04C8A3 Extract OS            00 (0) 'MS-DOS'\n+04C8A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04C8A6 Compression Method    0000 (0) 'Stored'\n+04C8A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04C8AC CRC                   00000000 (0)\n+04C8B0 Compressed Size       00000000 (0)\n+04C8B4 Uncompressed Size     00000000 (0)\n+04C8B8 Filename Length       0073 (115)\n+04C8BA Extra Length          0009 (9)\n+04C8BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C8BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04C92F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04C931   Length              0005 (5)\n+04C933   Flags               01 (1) 'Modification'\n+04C934   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04C938 PAYLOAD\n+\n+04D199 DATA DESCRIPTOR       08074B50 (134695760)\n+04D19D CRC                   4C048087 (1275363463)\n+04D1A1 Compressed Size       00000861 (2145)\n+04D1A5 Uncompressed Size     00000861 (2145)\n+\n+04D1A9 LOCAL HEADER #162     04034B50 (67324752)\n+04D1AD Extract Zip Spec      14 (20) '2.0'\n+04D1AE Extract OS            00 (0) 'MS-DOS'\n+04D1AF General Purpose Flag  0000 (0)\n+04D1B1 Compression Method    0000 (0) 'Stored'\n+04D1B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D1B7 CRC                   00000000 (0)\n+04D1BB Compressed Size       00000000 (0)\n+04D1BF Uncompressed Size     00000000 (0)\n+04D1C3 Filename Length       002D (45)\n+04D1C5 Extra Length          0009 (9)\n+04D1C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D1C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04D1F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04D1F6   Length              0005 (5)\n+04D1F8   Flags               01 (1) 'Modification'\n+04D1F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04D1FD LOCAL HEADER #163     04034B50 (67324752)\n+04D201 Extract Zip Spec      14 (20) '2.0'\n+04D202 Extract OS            00 (0) 'MS-DOS'\n+04D203 General Purpose Flag  0000 (0)\n+04D205 Compression Method    0000 (0) 'Stored'\n+04D207 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D20B CRC                   00000000 (0)\n+04D20F Compressed Size       00000000 (0)\n+04D213 Uncompressed Size     00000000 (0)\n+04D217 Filename Length       0036 (54)\n+04D219 Extra Length          0009 (9)\n+04D21B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D21B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04D251 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04D253   Length              0005 (5)\n+04D255   Flags               01 (1) 'Modification'\n+04D256   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04D25A LOCAL HEADER #164     04034B50 (67324752)\n+04D25E Extract Zip Spec      14 (20) '2.0'\n+04D25F Extract OS            00 (0) 'MS-DOS'\n+04D260 General Purpose Flag  0000 (0)\n+04D262 Compression Method    0000 (0) 'Stored'\n+04D264 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D268 CRC                   00000000 (0)\n+04D26C Compressed Size       00000000 (0)\n+04D270 Uncompressed Size     00000000 (0)\n+04D274 Filename Length       006A (106)\n+04D276 Extra Length          0009 (9)\n+04D278 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D278: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04D2E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04D2E4   Length              0005 (5)\n+04D2E6   Flags               01 (1) 'Modification'\n+04D2E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04D2EB LOCAL HEADER #165     04034B50 (67324752)\n+04D2EF Extract Zip Spec      14 (20) '2.0'\n+04D2F0 Extract OS            00 (0) 'MS-DOS'\n+04D2F1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04D2F3 Compression Method    0000 (0) 'Stored'\n+04D2F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04D2F9 CRC                   00000000 (0)\n+04D2FD Compressed Size       00000000 (0)\n+04D301 Uncompressed Size     00000000 (0)\n+04D305 Filename Length       0080 (128)\n+04D307 Extra Length          0009 (9)\n+04D309 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4D309: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04D389 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04D38B   Length              0005 (5)\n+04D38D   Flags               01 (1) 'Modification'\n+04D38E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04D392 PAYLOAD\n+\n+04F4F0 DATA DESCRIPTOR       08074B50 (134695760)\n+04F4F4 CRC                   877B2EE8 (2272997096)\n+04F4F8 Compressed Size       0000215E (8542)\n+04F4FC Uncompressed Size     0000215E (8542)\n+\n+04F500 LOCAL HEADER #166     04034B50 (67324752)\n+04F504 Extract Zip Spec      14 (20) '2.0'\n+04F505 Extract OS            00 (0) 'MS-DOS'\n+04F506 General Purpose Flag  0000 (0)\n+04F508 Compression Method    0000 (0) 'Stored'\n+04F50A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F50E CRC                   00000000 (0)\n+04F512 Compressed Size       00000000 (0)\n+04F516 Uncompressed Size     00000000 (0)\n+04F51A Filename Length       006E (110)\n+04F51C Extra Length          0009 (9)\n+04F51E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4F51E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04F58C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F58E   Length              0005 (5)\n+04F590   Flags               01 (1) 'Modification'\n+04F591   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04F595 LOCAL HEADER #167     04034B50 (67324752)\n+04F599 Extract Zip Spec      14 (20) '2.0'\n+04F59A Extract OS            00 (0) 'MS-DOS'\n+04F59B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+04F59D Compression Method    0000 (0) 'Stored'\n+04F59F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04F5A3 CRC                   00000000 (0)\n+04F5A7 Compressed Size       00000000 (0)\n+04F5AB Uncompressed Size     00000000 (0)\n+04F5AF Filename Length       0084 (132)\n+04F5B1 Extra Length          0009 (9)\n+04F5B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x4F61C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4F5B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F6A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04F6A2   Length              0005 (5)\n-04F6A4   Flags               01 (1) 'Modification'\n-04F6A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04F6A9 PAYLOAD\n-\n-050B28 DATA DESCRIPTOR       08074B50 (134695760)\n-050B2C CRC                   E43D22D5 (3829211861)\n-050B30 Compressed Size       0000147F (5247)\n-050B34 Uncompressed Size     0000147F (5247)\n-\n-050B38 LOCAL HEADER #168     04034B50 (67324752)\n-050B3C Extract Zip Spec      14 (20) '2.0'\n-050B3D Extract OS            00 (0) 'MS-DOS'\n-050B3E General Purpose Flag  0000 (0)\n-050B40 Compression Method    0000 (0) 'Stored'\n-050B42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-050B46 CRC                   00000000 (0)\n-050B4A Compressed Size       00000000 (0)\n-050B4E Uncompressed Size     00000000 (0)\n-050B52 Filename Length       0060 (96)\n-050B54 Extra Length          0009 (9)\n-050B56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50B56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-050BB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-050BB8   Length              0005 (5)\n-050BBA   Flags               01 (1) 'Modification'\n-050BBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-050BBF LOCAL HEADER #169     04034B50 (67324752)\n-050BC3 Extract Zip Spec      14 (20) '2.0'\n-050BC4 Extract OS            00 (0) 'MS-DOS'\n-050BC5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-050BC7 Compression Method    0000 (0) 'Stored'\n-050BC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-050BCD CRC                   00000000 (0)\n-050BD1 Compressed Size       00000000 (0)\n-050BD5 Uncompressed Size     00000000 (0)\n-050BD9 Filename Length       0076 (118)\n-050BDB Extra Length          0009 (9)\n-050BDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50BDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-050C53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-050C55   Length              0005 (5)\n-050C57   Flags               01 (1) 'Modification'\n-050C58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-050C5C PAYLOAD\n-\n-051CBC DATA DESCRIPTOR       08074B50 (134695760)\n-051CC0 CRC                   D765846F (3613754479)\n-051CC4 Compressed Size       00001060 (4192)\n-051CC8 Uncompressed Size     00001060 (4192)\n-\n-051CCC LOCAL HEADER #170     04034B50 (67324752)\n-051CD0 Extract Zip Spec      14 (20) '2.0'\n-051CD1 Extract OS            00 (0) 'MS-DOS'\n-051CD2 General Purpose Flag  0000 (0)\n-051CD4 Compression Method    0000 (0) 'Stored'\n-051CD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051CDA CRC                   00000000 (0)\n-051CDE Compressed Size       00000000 (0)\n-051CE2 Uncompressed Size     00000000 (0)\n-051CE6 Filename Length       0060 (96)\n-051CE8 Extra Length          0009 (9)\n-051CEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051D4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051D4C   Length              0005 (5)\n-051D4E   Flags               01 (1) 'Modification'\n-051D4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-051D53 LOCAL HEADER #171     04034B50 (67324752)\n-051D57 Extract Zip Spec      14 (20) '2.0'\n-051D58 Extract OS            00 (0) 'MS-DOS'\n-051D59 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-051D5B Compression Method    0000 (0) 'Stored'\n-051D5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-051D61 CRC                   00000000 (0)\n-051D65 Compressed Size       00000000 (0)\n-051D69 Uncompressed Size     00000000 (0)\n-051D6D Filename Length       0076 (118)\n-051D6F Extra Length          0009 (9)\n-051D71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-051DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-051DE9   Length              0005 (5)\n-051DEB   Flags               01 (1) 'Modification'\n-051DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-051DF0 PAYLOAD\n-\n-052F4C DATA DESCRIPTOR       08074B50 (134695760)\n-052F50 CRC                   57E394F3 (1474532595)\n-052F54 Compressed Size       0000115C (4444)\n-052F58 Uncompressed Size     0000115C (4444)\n-\n-052F5C LOCAL HEADER #172     04034B50 (67324752)\n-052F60 Extract Zip Spec      14 (20) '2.0'\n-052F61 Extract OS            00 (0) 'MS-DOS'\n-052F62 General Purpose Flag  0000 (0)\n-052F64 Compression Method    0000 (0) 'Stored'\n-052F66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052F6A CRC                   00000000 (0)\n-052F6E Compressed Size       00000000 (0)\n-052F72 Uncompressed Size     00000000 (0)\n-052F76 Filename Length       0023 (35)\n-052F78 Extra Length          0009 (9)\n-052F7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52F7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052F9D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052F9F   Length              0005 (5)\n-052FA1   Flags               01 (1) 'Modification'\n-052FA2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-052FA6 LOCAL HEADER #173     04034B50 (67324752)\n-052FAA Extract Zip Spec      14 (20) '2.0'\n-052FAB Extract OS            00 (0) 'MS-DOS'\n-052FAC General Purpose Flag  0000 (0)\n-052FAE Compression Method    0000 (0) 'Stored'\n-052FB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-052FB4 CRC                   00000000 (0)\n-052FB8 Compressed Size       00000000 (0)\n-052FBC Uncompressed Size     00000000 (0)\n-052FC0 Filename Length       002C (44)\n-052FC2 Extra Length          0009 (9)\n-052FC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-052FF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-052FF2   Length              0005 (5)\n-052FF4   Flags               01 (1) 'Modification'\n-052FF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-052FF9 LOCAL HEADER #174     04034B50 (67324752)\n-052FFD Extract Zip Spec      14 (20) '2.0'\n-052FFE Extract OS            00 (0) 'MS-DOS'\n-052FFF General Purpose Flag  0000 (0)\n-053001 Compression Method    0000 (0) 'Stored'\n-053003 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053007 CRC                   00000000 (0)\n-05300B Compressed Size       00000000 (0)\n-05300F Uncompressed Size     00000000 (0)\n-053013 Filename Length       005E (94)\n-053015 Extra Length          0009 (9)\n-053017 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53017: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053075 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053077   Length              0005 (5)\n-053079   Flags               01 (1) 'Modification'\n-05307A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05307E LOCAL HEADER #175     04034B50 (67324752)\n-053082 Extract Zip Spec      14 (20) '2.0'\n-053083 Extract OS            00 (0) 'MS-DOS'\n-053084 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-053086 Compression Method    0000 (0) 'Stored'\n-053088 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05308C CRC                   00000000 (0)\n-053090 Compressed Size       00000000 (0)\n-053094 Uncompressed Size     00000000 (0)\n-053098 Filename Length       0074 (116)\n-05309A Extra Length          0009 (9)\n-05309C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5309C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053112   Length              0005 (5)\n-053114   Flags               01 (1) 'Modification'\n-053115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-053119 PAYLOAD\n-\n-053920 DATA DESCRIPTOR       08074B50 (134695760)\n-053924 CRC                   990AFEE4 (2567634660)\n-053928 Compressed Size       00000807 (2055)\n-05392C Uncompressed Size     00000807 (2055)\n-\n-053930 LOCAL HEADER #176     04034B50 (67324752)\n-053934 Extract Zip Spec      14 (20) '2.0'\n-053935 Extract OS            00 (0) 'MS-DOS'\n-053936 General Purpose Flag  0000 (0)\n-053938 Compression Method    0000 (0) 'Stored'\n-05393A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05393E CRC                   00000000 (0)\n-053942 Compressed Size       00000000 (0)\n-053946 Uncompressed Size     00000000 (0)\n-05394A Filename Length       0028 (40)\n-05394C Extra Length          0009 (9)\n-05394E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5394E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053976 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053978   Length              0005 (5)\n-05397A   Flags               01 (1) 'Modification'\n-05397B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05397F LOCAL HEADER #177     04034B50 (67324752)\n-053983 Extract Zip Spec      14 (20) '2.0'\n-053984 Extract OS            00 (0) 'MS-DOS'\n-053985 General Purpose Flag  0000 (0)\n-053987 Compression Method    0000 (0) 'Stored'\n-053989 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05398D CRC                   00000000 (0)\n-053991 Compressed Size       00000000 (0)\n-053995 Uncompressed Size     00000000 (0)\n-053999 Filename Length       0031 (49)\n-05399B Extra Length          0009 (9)\n-05399D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5399D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0539CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0539D0   Length              0005 (5)\n-0539D2   Flags               01 (1) 'Modification'\n-0539D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0539D7 LOCAL HEADER #178     04034B50 (67324752)\n-0539DB Extract Zip Spec      14 (20) '2.0'\n-0539DC Extract OS            00 (0) 'MS-DOS'\n-0539DD General Purpose Flag  0000 (0)\n-0539DF Compression Method    0000 (0) 'Stored'\n-0539E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0539E5 CRC                   00000000 (0)\n-0539E9 Compressed Size       00000000 (0)\n-0539ED Uncompressed Size     00000000 (0)\n-0539F1 Filename Length       0070 (112)\n-0539F3 Extra Length          0009 (9)\n-0539F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-053A65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053A67   Length              0005 (5)\n-053A69   Flags               01 (1) 'Modification'\n-053A6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-053A6E LOCAL HEADER #179     04034B50 (67324752)\n-053A72 Extract Zip Spec      14 (20) '2.0'\n-053A73 Extract OS            00 (0) 'MS-DOS'\n-053A74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-053A76 Compression Method    0000 (0) 'Stored'\n-053A78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-053A7C CRC                   00000000 (0)\n-053A80 Compressed Size       00000000 (0)\n-053A84 Uncompressed Size     00000000 (0)\n-053A88 Filename Length       0086 (134)\n-053A8A Extra Length          0009 (9)\n-053A8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+04F637 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04F639   Length              0005 (5)\n+04F63B   Flags               01 (1) 'Modification'\n+04F63C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04F640 PAYLOAD\n+\n+050ABF DATA DESCRIPTOR       08074B50 (134695760)\n+050AC3 CRC                   E43D22D5 (3829211861)\n+050AC7 Compressed Size       0000147F (5247)\n+050ACB Uncompressed Size     0000147F (5247)\n+\n+050ACF LOCAL HEADER #168     04034B50 (67324752)\n+050AD3 Extract Zip Spec      14 (20) '2.0'\n+050AD4 Extract OS            00 (0) 'MS-DOS'\n+050AD5 General Purpose Flag  0000 (0)\n+050AD7 Compression Method    0000 (0) 'Stored'\n+050AD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+050ADD CRC                   00000000 (0)\n+050AE1 Compressed Size       00000000 (0)\n+050AE5 Uncompressed Size     00000000 (0)\n+050AE9 Filename Length       0060 (96)\n+050AEB Extra Length          0009 (9)\n+050AED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x50AED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+050B4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+050B4F   Length              0005 (5)\n+050B51   Flags               01 (1) 'Modification'\n+050B52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+050B56 LOCAL HEADER #169     04034B50 (67324752)\n+050B5A Extract Zip Spec      14 (20) '2.0'\n+050B5B Extract OS            00 (0) 'MS-DOS'\n+050B5C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+050B5E Compression Method    0000 (0) 'Stored'\n+050B60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+050B64 CRC                   00000000 (0)\n+050B68 Compressed Size       00000000 (0)\n+050B6C Uncompressed Size     00000000 (0)\n+050B70 Filename Length       0076 (118)\n+050B72 Extra Length          0009 (9)\n+050B74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x50B74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+050BEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+050BEC   Length              0005 (5)\n+050BEE   Flags               01 (1) 'Modification'\n+050BEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+050BF3 PAYLOAD\n+\n+051C53 DATA DESCRIPTOR       08074B50 (134695760)\n+051C57 CRC                   D765846F (3613754479)\n+051C5B Compressed Size       00001060 (4192)\n+051C5F Uncompressed Size     00001060 (4192)\n+\n+051C63 LOCAL HEADER #170     04034B50 (67324752)\n+051C67 Extract Zip Spec      14 (20) '2.0'\n+051C68 Extract OS            00 (0) 'MS-DOS'\n+051C69 General Purpose Flag  0000 (0)\n+051C6B Compression Method    0000 (0) 'Stored'\n+051C6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051C71 CRC                   00000000 (0)\n+051C75 Compressed Size       00000000 (0)\n+051C79 Uncompressed Size     00000000 (0)\n+051C7D Filename Length       0060 (96)\n+051C7F Extra Length          0009 (9)\n+051C81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+051CE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051CE3   Length              0005 (5)\n+051CE5   Flags               01 (1) 'Modification'\n+051CE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+051CEA LOCAL HEADER #171     04034B50 (67324752)\n+051CEE Extract Zip Spec      14 (20) '2.0'\n+051CEF Extract OS            00 (0) 'MS-DOS'\n+051CF0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+051CF2 Compression Method    0000 (0) 'Stored'\n+051CF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+051CF8 CRC                   00000000 (0)\n+051CFC Compressed Size       00000000 (0)\n+051D00 Uncompressed Size     00000000 (0)\n+051D04 Filename Length       0076 (118)\n+051D06 Extra Length          0009 (9)\n+051D08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+051D7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+051D80   Length              0005 (5)\n+051D82   Flags               01 (1) 'Modification'\n+051D83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+051D87 PAYLOAD\n+\n+052EE3 DATA DESCRIPTOR       08074B50 (134695760)\n+052EE7 CRC                   57E394F3 (1474532595)\n+052EEB Compressed Size       0000115C (4444)\n+052EEF Uncompressed Size     0000115C (4444)\n+\n+052EF3 LOCAL HEADER #172     04034B50 (67324752)\n+052EF7 Extract Zip Spec      14 (20) '2.0'\n+052EF8 Extract OS            00 (0) 'MS-DOS'\n+052EF9 General Purpose Flag  0000 (0)\n+052EFB Compression Method    0000 (0) 'Stored'\n+052EFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F01 CRC                   00000000 (0)\n+052F05 Compressed Size       00000000 (0)\n+052F09 Uncompressed Size     00000000 (0)\n+052F0D Filename Length       0023 (35)\n+052F0F Extra Length          0009 (9)\n+052F11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052F34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052F36   Length              0005 (5)\n+052F38   Flags               01 (1) 'Modification'\n+052F39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052F3D LOCAL HEADER #173     04034B50 (67324752)\n+052F41 Extract Zip Spec      14 (20) '2.0'\n+052F42 Extract OS            00 (0) 'MS-DOS'\n+052F43 General Purpose Flag  0000 (0)\n+052F45 Compression Method    0000 (0) 'Stored'\n+052F47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F4B CRC                   00000000 (0)\n+052F4F Compressed Size       00000000 (0)\n+052F53 Uncompressed Size     00000000 (0)\n+052F57 Filename Length       002C (44)\n+052F59 Extra Length          0009 (9)\n+052F5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52F5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+052F87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+052F89   Length              0005 (5)\n+052F8B   Flags               01 (1) 'Modification'\n+052F8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+052F90 LOCAL HEADER #174     04034B50 (67324752)\n+052F94 Extract Zip Spec      14 (20) '2.0'\n+052F95 Extract OS            00 (0) 'MS-DOS'\n+052F96 General Purpose Flag  0000 (0)\n+052F98 Compression Method    0000 (0) 'Stored'\n+052F9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+052F9E CRC                   00000000 (0)\n+052FA2 Compressed Size       00000000 (0)\n+052FA6 Uncompressed Size     00000000 (0)\n+052FAA Filename Length       005E (94)\n+052FAC Extra Length          0009 (9)\n+052FAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52FAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05300C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05300E   Length              0005 (5)\n+053010   Flags               01 (1) 'Modification'\n+053011   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053015 LOCAL HEADER #175     04034B50 (67324752)\n+053019 Extract Zip Spec      14 (20) '2.0'\n+05301A Extract OS            00 (0) 'MS-DOS'\n+05301B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05301D Compression Method    0000 (0) 'Stored'\n+05301F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053023 CRC                   00000000 (0)\n+053027 Compressed Size       00000000 (0)\n+05302B Uncompressed Size     00000000 (0)\n+05302F Filename Length       0074 (116)\n+053031 Extra Length          0009 (9)\n+053033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0530A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0530A9   Length              0005 (5)\n+0530AB   Flags               01 (1) 'Modification'\n+0530AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0530B0 PAYLOAD\n+\n+0538B7 DATA DESCRIPTOR       08074B50 (134695760)\n+0538BB CRC                   990AFEE4 (2567634660)\n+0538BF Compressed Size       00000807 (2055)\n+0538C3 Uncompressed Size     00000807 (2055)\n+\n+0538C7 LOCAL HEADER #176     04034B50 (67324752)\n+0538CB Extract Zip Spec      14 (20) '2.0'\n+0538CC Extract OS            00 (0) 'MS-DOS'\n+0538CD General Purpose Flag  0000 (0)\n+0538CF Compression Method    0000 (0) 'Stored'\n+0538D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0538D5 CRC                   00000000 (0)\n+0538D9 Compressed Size       00000000 (0)\n+0538DD Uncompressed Size     00000000 (0)\n+0538E1 Filename Length       0028 (40)\n+0538E3 Extra Length          0009 (9)\n+0538E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x538E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05390D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05390F   Length              0005 (5)\n+053911   Flags               01 (1) 'Modification'\n+053912   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053916 LOCAL HEADER #177     04034B50 (67324752)\n+05391A Extract Zip Spec      14 (20) '2.0'\n+05391B Extract OS            00 (0) 'MS-DOS'\n+05391C General Purpose Flag  0000 (0)\n+05391E Compression Method    0000 (0) 'Stored'\n+053920 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053924 CRC                   00000000 (0)\n+053928 Compressed Size       00000000 (0)\n+05392C Uncompressed Size     00000000 (0)\n+053930 Filename Length       0031 (49)\n+053932 Extra Length          0009 (9)\n+053934 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x53934: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+053965 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053967   Length              0005 (5)\n+053969   Flags               01 (1) 'Modification'\n+05396A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05396E LOCAL HEADER #178     04034B50 (67324752)\n+053972 Extract Zip Spec      14 (20) '2.0'\n+053973 Extract OS            00 (0) 'MS-DOS'\n+053974 General Purpose Flag  0000 (0)\n+053976 Compression Method    0000 (0) 'Stored'\n+053978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05397C CRC                   00000000 (0)\n+053980 Compressed Size       00000000 (0)\n+053984 Uncompressed Size     00000000 (0)\n+053988 Filename Length       0070 (112)\n+05398A Extra Length          0009 (9)\n+05398C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5398C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0539FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0539FE   Length              0005 (5)\n+053A00   Flags               01 (1) 'Modification'\n+053A01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+053A05 LOCAL HEADER #179     04034B50 (67324752)\n+053A09 Extract Zip Spec      14 (20) '2.0'\n+053A0A Extract OS            00 (0) 'MS-DOS'\n+053A0B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+053A0D Compression Method    0000 (0) 'Stored'\n+053A0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+053A13 CRC                   00000000 (0)\n+053A17 Compressed Size       00000000 (0)\n+053A1B Uncompressed Size     00000000 (0)\n+053A1F Filename Length       0086 (134)\n+053A21 Extra Length          0009 (9)\n+053A23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x53A8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53A23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-053B12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-053B14   Length              0005 (5)\n-053B16   Flags               01 (1) 'Modification'\n-053B17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-053B1B PAYLOAD\n-\n-058C1E DATA DESCRIPTOR       08074B50 (134695760)\n-058C22 CRC                   F6367964 (4130765156)\n-058C26 Compressed Size       00005103 (20739)\n-058C2A Uncompressed Size     00005103 (20739)\n-\n-058C2E LOCAL HEADER #180     04034B50 (67324752)\n-058C32 Extract Zip Spec      14 (20) '2.0'\n-058C33 Extract OS            00 (0) 'MS-DOS'\n-058C34 General Purpose Flag  0000 (0)\n-058C36 Compression Method    0000 (0) 'Stored'\n-058C38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058C3C CRC                   00000000 (0)\n-058C40 Compressed Size       00000000 (0)\n-058C44 Uncompressed Size     00000000 (0)\n-058C48 Filename Length       006A (106)\n-058C4A Extra Length          0009 (9)\n-058C4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58C4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058CB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058CB8   Length              0005 (5)\n-058CBA   Flags               01 (1) 'Modification'\n-058CBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058CBF LOCAL HEADER #181     04034B50 (67324752)\n-058CC3 Extract Zip Spec      14 (20) '2.0'\n-058CC4 Extract OS            00 (0) 'MS-DOS'\n-058CC5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-058CC7 Compression Method    0000 (0) 'Stored'\n-058CC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058CCD CRC                   00000000 (0)\n-058CD1 Compressed Size       00000000 (0)\n-058CD5 Uncompressed Size     00000000 (0)\n-058CD9 Filename Length       0080 (128)\n-058CDB Extra Length          0009 (9)\n-058CDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58CDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058D5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058D5F   Length              0005 (5)\n-058D61   Flags               01 (1) 'Modification'\n-058D62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-058D66 PAYLOAD\n-\n-05CB1F DATA DESCRIPTOR       08074B50 (134695760)\n-05CB23 CRC                   9EC902FD (2663973629)\n-05CB27 Compressed Size       00003DB9 (15801)\n-05CB2B Uncompressed Size     00003DB9 (15801)\n-\n-05CB2F LOCAL HEADER #182     04034B50 (67324752)\n-05CB33 Extract Zip Spec      14 (20) '2.0'\n-05CB34 Extract OS            00 (0) 'MS-DOS'\n-05CB35 General Purpose Flag  0000 (0)\n-05CB37 Compression Method    0000 (0) 'Stored'\n-05CB39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05CB3D CRC                   00000000 (0)\n-05CB41 Compressed Size       00000000 (0)\n-05CB45 Uncompressed Size     00000000 (0)\n-05CB49 Filename Length       0070 (112)\n-05CB4B Extra Length          0009 (9)\n-05CB4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5CB4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05CBBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05CBBF   Length              0005 (5)\n-05CBC1   Flags               01 (1) 'Modification'\n-05CBC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05CBC6 LOCAL HEADER #183     04034B50 (67324752)\n-05CBCA Extract Zip Spec      14 (20) '2.0'\n-05CBCB Extract OS            00 (0) 'MS-DOS'\n-05CBCC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-05CBCE Compression Method    0000 (0) 'Stored'\n-05CBD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05CBD4 CRC                   00000000 (0)\n-05CBD8 Compressed Size       00000000 (0)\n-05CBDC Uncompressed Size     00000000 (0)\n-05CBE0 Filename Length       0086 (134)\n-05CBE2 Extra Length          0009 (9)\n-05CBE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+053AA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+053AAB   Length              0005 (5)\n+053AAD   Flags               01 (1) 'Modification'\n+053AAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+053AB2 PAYLOAD\n+\n+058BB5 DATA DESCRIPTOR       08074B50 (134695760)\n+058BB9 CRC                   F6367964 (4130765156)\n+058BBD Compressed Size       00005103 (20739)\n+058BC1 Uncompressed Size     00005103 (20739)\n+\n+058BC5 LOCAL HEADER #180     04034B50 (67324752)\n+058BC9 Extract Zip Spec      14 (20) '2.0'\n+058BCA Extract OS            00 (0) 'MS-DOS'\n+058BCB General Purpose Flag  0000 (0)\n+058BCD Compression Method    0000 (0) 'Stored'\n+058BCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058BD3 CRC                   00000000 (0)\n+058BD7 Compressed Size       00000000 (0)\n+058BDB Uncompressed Size     00000000 (0)\n+058BDF Filename Length       006A (106)\n+058BE1 Extra Length          0009 (9)\n+058BE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58BE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058C4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058C4F   Length              0005 (5)\n+058C51   Flags               01 (1) 'Modification'\n+058C52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+058C56 LOCAL HEADER #181     04034B50 (67324752)\n+058C5A Extract Zip Spec      14 (20) '2.0'\n+058C5B Extract OS            00 (0) 'MS-DOS'\n+058C5C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+058C5E Compression Method    0000 (0) 'Stored'\n+058C60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058C64 CRC                   00000000 (0)\n+058C68 Compressed Size       00000000 (0)\n+058C6C Uncompressed Size     00000000 (0)\n+058C70 Filename Length       0080 (128)\n+058C72 Extra Length          0009 (9)\n+058C74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58C74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058CF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058CF6   Length              0005 (5)\n+058CF8   Flags               01 (1) 'Modification'\n+058CF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+058CFD PAYLOAD\n+\n+05CAB6 DATA DESCRIPTOR       08074B50 (134695760)\n+05CABA CRC                   9EC902FD (2663973629)\n+05CABE Compressed Size       00003DB9 (15801)\n+05CAC2 Uncompressed Size     00003DB9 (15801)\n+\n+05CAC6 LOCAL HEADER #182     04034B50 (67324752)\n+05CACA Extract Zip Spec      14 (20) '2.0'\n+05CACB Extract OS            00 (0) 'MS-DOS'\n+05CACC General Purpose Flag  0000 (0)\n+05CACE Compression Method    0000 (0) 'Stored'\n+05CAD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05CAD4 CRC                   00000000 (0)\n+05CAD8 Compressed Size       00000000 (0)\n+05CADC Uncompressed Size     00000000 (0)\n+05CAE0 Filename Length       0070 (112)\n+05CAE2 Extra Length          0009 (9)\n+05CAE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5CAE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05CB54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05CB56   Length              0005 (5)\n+05CB58   Flags               01 (1) 'Modification'\n+05CB59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05CB5D LOCAL HEADER #183     04034B50 (67324752)\n+05CB61 Extract Zip Spec      14 (20) '2.0'\n+05CB62 Extract OS            00 (0) 'MS-DOS'\n+05CB63 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+05CB65 Compression Method    0000 (0) 'Stored'\n+05CB67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05CB6B CRC                   00000000 (0)\n+05CB6F Compressed Size       00000000 (0)\n+05CB73 Uncompressed Size     00000000 (0)\n+05CB77 Filename Length       0086 (134)\n+05CB79 Extra Length          0009 (9)\n+05CB7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x5CBE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5CB7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05CC6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05CC6C   Length              0005 (5)\n-05CC6E   Flags               01 (1) 'Modification'\n-05CC6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05CC73 PAYLOAD\n-\n-0668B0 DATA DESCRIPTOR       08074B50 (134695760)\n-0668B4 CRC                   AD150348 (2903835464)\n-0668B8 Compressed Size       00009C3D (39997)\n-0668BC Uncompressed Size     00009C3D (39997)\n-\n-0668C0 LOCAL HEADER #184     04034B50 (67324752)\n-0668C4 Extract Zip Spec      14 (20) '2.0'\n-0668C5 Extract OS            00 (0) 'MS-DOS'\n-0668C6 General Purpose Flag  0000 (0)\n-0668C8 Compression Method    0000 (0) 'Stored'\n-0668CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0668CE CRC                   00000000 (0)\n-0668D2 Compressed Size       00000000 (0)\n-0668D6 Uncompressed Size     00000000 (0)\n-0668DA Filename Length       006A (106)\n-0668DC Extra Length          0009 (9)\n-0668DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x668DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-066948 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06694A   Length              0005 (5)\n-06694C   Flags               01 (1) 'Modification'\n-06694D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-066951 LOCAL HEADER #185     04034B50 (67324752)\n-066955 Extract Zip Spec      14 (20) '2.0'\n-066956 Extract OS            00 (0) 'MS-DOS'\n-066957 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-066959 Compression Method    0000 (0) 'Stored'\n-06695B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06695F CRC                   00000000 (0)\n-066963 Compressed Size       00000000 (0)\n-066967 Uncompressed Size     00000000 (0)\n-06696B Filename Length       0080 (128)\n-06696D Extra Length          0009 (9)\n-06696F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6696F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0669EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0669F1   Length              0005 (5)\n-0669F3   Flags               01 (1) 'Modification'\n-0669F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0669F8 PAYLOAD\n-\n-069644 DATA DESCRIPTOR       08074B50 (134695760)\n-069648 CRC                   8BF94713 (2348369683)\n-06964C Compressed Size       00002C4C (11340)\n-069650 Uncompressed Size     00002C4C (11340)\n-\n-069654 LOCAL HEADER #186     04034B50 (67324752)\n-069658 Extract Zip Spec      14 (20) '2.0'\n-069659 Extract OS            00 (0) 'MS-DOS'\n-06965A General Purpose Flag  0000 (0)\n-06965C Compression Method    0000 (0) 'Stored'\n-06965E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069662 CRC                   00000000 (0)\n-069666 Compressed Size       00000000 (0)\n-06966A Uncompressed Size     00000000 (0)\n-06966E Filename Length       002E (46)\n-069670 Extra Length          0009 (9)\n-069672 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69672: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0696A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0696A2   Length              0005 (5)\n-0696A4   Flags               01 (1) 'Modification'\n-0696A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0696A9 LOCAL HEADER #187     04034B50 (67324752)\n-0696AD Extract Zip Spec      14 (20) '2.0'\n-0696AE Extract OS            00 (0) 'MS-DOS'\n-0696AF General Purpose Flag  0000 (0)\n-0696B1 Compression Method    0000 (0) 'Stored'\n-0696B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0696B7 CRC                   00000000 (0)\n-0696BB Compressed Size       00000000 (0)\n-0696BF Uncompressed Size     00000000 (0)\n-0696C3 Filename Length       0037 (55)\n-0696C5 Extra Length          0009 (9)\n-0696C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x696C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0696FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069700   Length              0005 (5)\n-069702   Flags               01 (1) 'Modification'\n-069703   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-069707 LOCAL HEADER #188     04034B50 (67324752)\n-06970B Extract Zip Spec      14 (20) '2.0'\n-06970C Extract OS            00 (0) 'MS-DOS'\n-06970D General Purpose Flag  0000 (0)\n-06970F Compression Method    0000 (0) 'Stored'\n-069711 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-069715 CRC                   00000000 (0)\n-069719 Compressed Size       00000000 (0)\n-06971D Uncompressed Size     00000000 (0)\n-069721 Filename Length       0060 (96)\n-069723 Extra Length          0009 (9)\n-069725 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x69725: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069785 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069787   Length              0005 (5)\n-069789   Flags               01 (1) 'Modification'\n-06978A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06978E LOCAL HEADER #189     04034B50 (67324752)\n-069792 Extract Zip Spec      14 (20) '2.0'\n-069793 Extract OS            00 (0) 'MS-DOS'\n-069794 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-069796 Compression Method    0000 (0) 'Stored'\n-069798 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06979C CRC                   00000000 (0)\n-0697A0 Compressed Size       00000000 (0)\n-0697A4 Uncompressed Size     00000000 (0)\n-0697A8 Filename Length       0076 (118)\n-0697AA Extra Length          0009 (9)\n-0697AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x697AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-069822 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-069824   Length              0005 (5)\n-069826   Flags               01 (1) 'Modification'\n-069827   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06982B PAYLOAD\n-\n-06A725 DATA DESCRIPTOR       08074B50 (134695760)\n-06A729 CRC                   42E654D4 (1122391252)\n-06A72D Compressed Size       00000EFA (3834)\n-06A731 Uncompressed Size     00000EFA (3834)\n-\n-06A735 LOCAL HEADER #190     04034B50 (67324752)\n-06A739 Extract Zip Spec      14 (20) '2.0'\n-06A73A Extract OS            00 (0) 'MS-DOS'\n-06A73B General Purpose Flag  0000 (0)\n-06A73D Compression Method    0000 (0) 'Stored'\n-06A73F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A743 CRC                   00000000 (0)\n-06A747 Compressed Size       00000000 (0)\n-06A74B Uncompressed Size     00000000 (0)\n-06A74F Filename Length       0066 (102)\n-06A751 Extra Length          0009 (9)\n-06A753 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A753: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A7B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A7BB   Length              0005 (5)\n-06A7BD   Flags               01 (1) 'Modification'\n-06A7BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06A7C2 LOCAL HEADER #191     04034B50 (67324752)\n-06A7C6 Extract Zip Spec      14 (20) '2.0'\n-06A7C7 Extract OS            00 (0) 'MS-DOS'\n-06A7C8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06A7CA Compression Method    0000 (0) 'Stored'\n-06A7CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A7D0 CRC                   00000000 (0)\n-06A7D4 Compressed Size       00000000 (0)\n-06A7D8 Uncompressed Size     00000000 (0)\n-06A7DC Filename Length       007C (124)\n-06A7DE Extra Length          0009 (9)\n-06A7E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6A7E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06A85C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06A85E   Length              0005 (5)\n-06A860   Flags               01 (1) 'Modification'\n-06A861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06A865 PAYLOAD\n-\n-06BF3C DATA DESCRIPTOR       08074B50 (134695760)\n-06BF40 CRC                   51B4F745 (1370814277)\n-06BF44 Compressed Size       000016D7 (5847)\n-06BF48 Uncompressed Size     000016D7 (5847)\n-\n-06BF4C LOCAL HEADER #192     04034B50 (67324752)\n-06BF50 Extract Zip Spec      14 (20) '2.0'\n-06BF51 Extract OS            00 (0) 'MS-DOS'\n-06BF52 General Purpose Flag  0000 (0)\n-06BF54 Compression Method    0000 (0) 'Stored'\n-06BF56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BF5A CRC                   00000000 (0)\n-06BF5E Compressed Size       00000000 (0)\n-06BF62 Uncompressed Size     00000000 (0)\n-06BF66 Filename Length       0026 (38)\n-06BF68 Extra Length          0009 (9)\n-06BF6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BF6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BF90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BF92   Length              0005 (5)\n-06BF94   Flags               01 (1) 'Modification'\n-06BF95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BF99 LOCAL HEADER #193     04034B50 (67324752)\n-06BF9D Extract Zip Spec      14 (20) '2.0'\n-06BF9E Extract OS            00 (0) 'MS-DOS'\n-06BF9F General Purpose Flag  0000 (0)\n-06BFA1 Compression Method    0000 (0) 'Stored'\n-06BFA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BFA7 CRC                   00000000 (0)\n-06BFAB Compressed Size       00000000 (0)\n-06BFAF Uncompressed Size     00000000 (0)\n-06BFB3 Filename Length       002F (47)\n-06BFB5 Extra Length          0009 (9)\n-06BFB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6BFB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06BFE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06BFE8   Length              0005 (5)\n-06BFEA   Flags               01 (1) 'Modification'\n-06BFEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06BFEF LOCAL HEADER #194     04034B50 (67324752)\n-06BFF3 Extract Zip Spec      14 (20) '2.0'\n-06BFF4 Extract OS            00 (0) 'MS-DOS'\n-06BFF5 General Purpose Flag  0000 (0)\n-06BFF7 Compression Method    0000 (0) 'Stored'\n-06BFF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06BFFD CRC                   00000000 (0)\n-06C001 Compressed Size       00000000 (0)\n-06C005 Uncompressed Size     00000000 (0)\n-06C009 Filename Length       005E (94)\n-06C00B Extra Length          0009 (9)\n-06C00D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C00D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C06B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C06D   Length              0005 (5)\n-06C06F   Flags               01 (1) 'Modification'\n-06C070   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06C074 LOCAL HEADER #195     04034B50 (67324752)\n-06C078 Extract Zip Spec      14 (20) '2.0'\n-06C079 Extract OS            00 (0) 'MS-DOS'\n-06C07A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06C07C Compression Method    0000 (0) 'Stored'\n-06C07E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C082 CRC                   00000000 (0)\n-06C086 Compressed Size       00000000 (0)\n-06C08A Uncompressed Size     00000000 (0)\n-06C08E Filename Length       0074 (116)\n-06C090 Extra Length          0009 (9)\n-06C092 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C092: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C108   Length              0005 (5)\n-06C10A   Flags               01 (1) 'Modification'\n-06C10B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06C10F PAYLOAD\n-\n-06C7D5 DATA DESCRIPTOR       08074B50 (134695760)\n-06C7D9 CRC                   357DA477 (897426551)\n-06C7DD Compressed Size       000006C6 (1734)\n-06C7E1 Uncompressed Size     000006C6 (1734)\n-\n-06C7E5 LOCAL HEADER #196     04034B50 (67324752)\n-06C7E9 Extract Zip Spec      14 (20) '2.0'\n-06C7EA Extract OS            00 (0) 'MS-DOS'\n-06C7EB General Purpose Flag  0000 (0)\n-06C7ED Compression Method    0000 (0) 'Stored'\n-06C7EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C7F3 CRC                   00000000 (0)\n-06C7F7 Compressed Size       00000000 (0)\n-06C7FB Uncompressed Size     00000000 (0)\n-06C7FF Filename Length       005B (91)\n-06C801 Extra Length          0009 (9)\n-06C803 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C803: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C85E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C860   Length              0005 (5)\n-06C862   Flags               01 (1) 'Modification'\n-06C863   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06C867 LOCAL HEADER #197     04034B50 (67324752)\n-06C86B Extract Zip Spec      14 (20) '2.0'\n-06C86C Extract OS            00 (0) 'MS-DOS'\n-06C86D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06C86F Compression Method    0000 (0) 'Stored'\n-06C871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06C875 CRC                   00000000 (0)\n-06C879 Compressed Size       00000000 (0)\n-06C87D Uncompressed Size     00000000 (0)\n-06C881 Filename Length       0071 (113)\n-06C883 Extra Length          0009 (9)\n-06C885 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6C885: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06C8F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06C8F8   Length              0005 (5)\n-06C8FA   Flags               01 (1) 'Modification'\n-06C8FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06C8FF PAYLOAD\n-\n-06D2BB DATA DESCRIPTOR       08074B50 (134695760)\n-06D2BF CRC                   F9CAC97B (4190816635)\n-06D2C3 Compressed Size       000009BC (2492)\n-06D2C7 Uncompressed Size     000009BC (2492)\n-\n-06D2CB LOCAL HEADER #198     04034B50 (67324752)\n-06D2CF Extract Zip Spec      14 (20) '2.0'\n-06D2D0 Extract OS            00 (0) 'MS-DOS'\n-06D2D1 General Purpose Flag  0000 (0)\n-06D2D3 Compression Method    0000 (0) 'Stored'\n-06D2D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D2D9 CRC                   00000000 (0)\n-06D2DD Compressed Size       00000000 (0)\n-06D2E1 Uncompressed Size     00000000 (0)\n-06D2E5 Filename Length       0061 (97)\n-06D2E7 Extra Length          0009 (9)\n-06D2E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D2E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D34A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D34C   Length              0005 (5)\n-06D34E   Flags               01 (1) 'Modification'\n-06D34F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06D353 LOCAL HEADER #199     04034B50 (67324752)\n-06D357 Extract Zip Spec      14 (20) '2.0'\n-06D358 Extract OS            00 (0) 'MS-DOS'\n-06D359 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06D35B Compression Method    0000 (0) 'Stored'\n-06D35D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06D361 CRC                   00000000 (0)\n-06D365 Compressed Size       00000000 (0)\n-06D369 Uncompressed Size     00000000 (0)\n-06D36D Filename Length       0077 (119)\n-06D36F Extra Length          0009 (9)\n-06D371 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6D371: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06D3E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06D3EA   Length              0005 (5)\n-06D3EC   Flags               01 (1) 'Modification'\n-06D3ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06D3F1 PAYLOAD\n-\n-06DDF8 DATA DESCRIPTOR       08074B50 (134695760)\n-06DDFC CRC                   9DEB8C8B (2649459851)\n-06DE00 Compressed Size       00000A07 (2567)\n-06DE04 Uncompressed Size     00000A07 (2567)\n-\n-06DE08 LOCAL HEADER #200     04034B50 (67324752)\n-06DE0C Extract Zip Spec      14 (20) '2.0'\n-06DE0D Extract OS            00 (0) 'MS-DOS'\n-06DE0E General Purpose Flag  0000 (0)\n-06DE10 Compression Method    0000 (0) 'Stored'\n-06DE12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06DE16 CRC                   00000000 (0)\n-06DE1A Compressed Size       00000000 (0)\n-06DE1E Uncompressed Size     00000000 (0)\n-06DE22 Filename Length       005B (91)\n-06DE24 Extra Length          0009 (9)\n-06DE26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6DE26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06DE81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06DE83   Length              0005 (5)\n-06DE85   Flags               01 (1) 'Modification'\n-06DE86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06DE8A LOCAL HEADER #201     04034B50 (67324752)\n-06DE8E Extract Zip Spec      14 (20) '2.0'\n-06DE8F Extract OS            00 (0) 'MS-DOS'\n-06DE90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06DE92 Compression Method    0000 (0) 'Stored'\n-06DE94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06DE98 CRC                   00000000 (0)\n-06DE9C Compressed Size       00000000 (0)\n-06DEA0 Uncompressed Size     00000000 (0)\n-06DEA4 Filename Length       0071 (113)\n-06DEA6 Extra Length          0009 (9)\n-06DEA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6DEA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06DF19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06DF1B   Length              0005 (5)\n-06DF1D   Flags               01 (1) 'Modification'\n-06DF1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06DF22 PAYLOAD\n-\n-06ED00 DATA DESCRIPTOR       08074B50 (134695760)\n-06ED04 CRC                   85B17459 (2242999385)\n-06ED08 Compressed Size       00000DDE (3550)\n-06ED0C Uncompressed Size     00000DDE (3550)\n-\n-06ED10 LOCAL HEADER #202     04034B50 (67324752)\n-06ED14 Extract Zip Spec      14 (20) '2.0'\n-06ED15 Extract OS            00 (0) 'MS-DOS'\n-06ED16 General Purpose Flag  0000 (0)\n-06ED18 Compression Method    0000 (0) 'Stored'\n-06ED1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06ED1E CRC                   00000000 (0)\n-06ED22 Compressed Size       00000000 (0)\n-06ED26 Uncompressed Size     00000000 (0)\n-06ED2A Filename Length       0066 (102)\n-06ED2C Extra Length          0009 (9)\n-06ED2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6ED2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06ED94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06ED96   Length              0005 (5)\n-06ED98   Flags               01 (1) 'Modification'\n-06ED99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06ED9D LOCAL HEADER #203     04034B50 (67324752)\n-06EDA1 Extract Zip Spec      14 (20) '2.0'\n-06EDA2 Extract OS            00 (0) 'MS-DOS'\n-06EDA3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06EDA5 Compression Method    0000 (0) 'Stored'\n-06EDA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06EDAB CRC                   00000000 (0)\n-06EDAF Compressed Size       00000000 (0)\n-06EDB3 Uncompressed Size     00000000 (0)\n-06EDB7 Filename Length       007C (124)\n-06EDB9 Extra Length          0009 (9)\n-06EDBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6EDBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06EE37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06EE39   Length              0005 (5)\n-06EE3B   Flags               01 (1) 'Modification'\n-06EE3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06EE40 PAYLOAD\n-\n-06F40F DATA DESCRIPTOR       08074B50 (134695760)\n-06F413 CRC                   9C229073 (2619510899)\n-06F417 Compressed Size       000005CF (1487)\n-06F41B Uncompressed Size     000005CF (1487)\n-\n-06F41F LOCAL HEADER #204     04034B50 (67324752)\n-06F423 Extract Zip Spec      14 (20) '2.0'\n-06F424 Extract OS            00 (0) 'MS-DOS'\n-06F425 General Purpose Flag  0000 (0)\n-06F427 Compression Method    0000 (0) 'Stored'\n-06F429 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06F42D CRC                   00000000 (0)\n-06F431 Compressed Size       00000000 (0)\n-06F435 Uncompressed Size     00000000 (0)\n-06F439 Filename Length       0066 (102)\n-06F43B Extra Length          0009 (9)\n-06F43D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6F43D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06F4A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06F4A5   Length              0005 (5)\n-06F4A7   Flags               01 (1) 'Modification'\n-06F4A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06F4AC LOCAL HEADER #205     04034B50 (67324752)\n-06F4B0 Extract Zip Spec      14 (20) '2.0'\n-06F4B1 Extract OS            00 (0) 'MS-DOS'\n-06F4B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06F4B4 Compression Method    0000 (0) 'Stored'\n-06F4B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06F4BA CRC                   00000000 (0)\n-06F4BE Compressed Size       00000000 (0)\n-06F4C2 Uncompressed Size     00000000 (0)\n-06F4C6 Filename Length       007C (124)\n-06F4C8 Extra Length          0009 (9)\n-06F4CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6F4CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06F546 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06F548   Length              0005 (5)\n-06F54A   Flags               01 (1) 'Modification'\n-06F54B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06F54F PAYLOAD\n-\n-06FB11 DATA DESCRIPTOR       08074B50 (134695760)\n-06FB15 CRC                   A57691CD (2776011213)\n-06FB19 Compressed Size       000005C2 (1474)\n-06FB1D Uncompressed Size     000005C2 (1474)\n-\n-06FB21 LOCAL HEADER #206     04034B50 (67324752)\n-06FB25 Extract Zip Spec      14 (20) '2.0'\n-06FB26 Extract OS            00 (0) 'MS-DOS'\n-06FB27 General Purpose Flag  0000 (0)\n-06FB29 Compression Method    0000 (0) 'Stored'\n-06FB2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06FB2F CRC                   00000000 (0)\n-06FB33 Compressed Size       00000000 (0)\n-06FB37 Uncompressed Size     00000000 (0)\n-06FB3B Filename Length       0065 (101)\n-06FB3D Extra Length          0009 (9)\n-06FB3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6FB3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06FBA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06FBA6   Length              0005 (5)\n-06FBA8   Flags               01 (1) 'Modification'\n-06FBA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-06FBAD LOCAL HEADER #207     04034B50 (67324752)\n-06FBB1 Extract Zip Spec      14 (20) '2.0'\n-06FBB2 Extract OS            00 (0) 'MS-DOS'\n-06FBB3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-06FBB5 Compression Method    0000 (0) 'Stored'\n-06FBB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06FBBB CRC                   00000000 (0)\n-06FBBF Compressed Size       00000000 (0)\n-06FBC3 Uncompressed Size     00000000 (0)\n-06FBC7 Filename Length       007B (123)\n-06FBC9 Extra Length          0009 (9)\n-06FBCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6FBCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06FC46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06FC48   Length              0005 (5)\n-06FC4A   Flags               01 (1) 'Modification'\n-06FC4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06FC4F PAYLOAD\n-\n-070389 DATA DESCRIPTOR       08074B50 (134695760)\n-07038D CRC                   6CD31445 (1825772613)\n-070391 Compressed Size       0000073A (1850)\n-070395 Uncompressed Size     0000073A (1850)\n-\n-070399 LOCAL HEADER #208     04034B50 (67324752)\n-07039D Extract Zip Spec      14 (20) '2.0'\n-07039E Extract OS            00 (0) 'MS-DOS'\n-07039F General Purpose Flag  0000 (0)\n-0703A1 Compression Method    0000 (0) 'Stored'\n-0703A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0703A7 CRC                   00000000 (0)\n-0703AB Compressed Size       00000000 (0)\n-0703AF Uncompressed Size     00000000 (0)\n-0703B3 Filename Length       0063 (99)\n-0703B5 Extra Length          0009 (9)\n-0703B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x703B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07041A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07041C   Length              0005 (5)\n-07041E   Flags               01 (1) 'Modification'\n-07041F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-070423 LOCAL HEADER #209     04034B50 (67324752)\n-070427 Extract Zip Spec      14 (20) '2.0'\n-070428 Extract OS            00 (0) 'MS-DOS'\n-070429 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07042B Compression Method    0000 (0) 'Stored'\n-07042D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070431 CRC                   00000000 (0)\n-070435 Compressed Size       00000000 (0)\n-070439 Uncompressed Size     00000000 (0)\n-07043D Filename Length       0079 (121)\n-07043F Extra Length          0009 (9)\n-070441 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70441: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0704BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0704BC   Length              0005 (5)\n-0704BE   Flags               01 (1) 'Modification'\n-0704BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0704C3 PAYLOAD\n-\n-070F55 DATA DESCRIPTOR       08074B50 (134695760)\n-070F59 CRC                   C97DF8D6 (3380476118)\n-070F5D Compressed Size       00000A92 (2706)\n-070F61 Uncompressed Size     00000A92 (2706)\n-\n-070F65 LOCAL HEADER #210     04034B50 (67324752)\n-070F69 Extract Zip Spec      14 (20) '2.0'\n-070F6A Extract OS            00 (0) 'MS-DOS'\n-070F6B General Purpose Flag  0000 (0)\n-070F6D Compression Method    0000 (0) 'Stored'\n-070F6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070F73 CRC                   00000000 (0)\n-070F77 Compressed Size       00000000 (0)\n-070F7B Uncompressed Size     00000000 (0)\n-070F7F Filename Length       0023 (35)\n-070F81 Extra Length          0009 (9)\n-070F83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70F83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070FA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070FA8   Length              0005 (5)\n-070FAA   Flags               01 (1) 'Modification'\n-070FAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-070FAF LOCAL HEADER #211     04034B50 (67324752)\n-070FB3 Extract Zip Spec      14 (20) '2.0'\n-070FB4 Extract OS            00 (0) 'MS-DOS'\n-070FB5 General Purpose Flag  0000 (0)\n-070FB7 Compression Method    0000 (0) 'Stored'\n-070FB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-070FBD CRC                   00000000 (0)\n-070FC1 Compressed Size       00000000 (0)\n-070FC5 Uncompressed Size     00000000 (0)\n-070FC9 Filename Length       002C (44)\n-070FCB Extra Length          0009 (9)\n-070FCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x70FCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-070FF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-070FFB   Length              0005 (5)\n-070FFD   Flags               01 (1) 'Modification'\n-070FFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071002 LOCAL HEADER #212     04034B50 (67324752)\n-071006 Extract Zip Spec      14 (20) '2.0'\n-071007 Extract OS            00 (0) 'MS-DOS'\n-071008 General Purpose Flag  0000 (0)\n-07100A Compression Method    0000 (0) 'Stored'\n-07100C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071010 CRC                   00000000 (0)\n-071014 Compressed Size       00000000 (0)\n-071018 Uncompressed Size     00000000 (0)\n-07101C Filename Length       0058 (88)\n-07101E Extra Length          0009 (9)\n-071020 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71020: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-071078 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07107A   Length              0005 (5)\n-07107C   Flags               01 (1) 'Modification'\n-07107D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071081 LOCAL HEADER #213     04034B50 (67324752)\n-071085 Extract Zip Spec      14 (20) '2.0'\n-071086 Extract OS            00 (0) 'MS-DOS'\n-071087 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-071089 Compression Method    0000 (0) 'Stored'\n-07108B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07108F CRC                   00000000 (0)\n-071093 Compressed Size       00000000 (0)\n-071097 Uncompressed Size     00000000 (0)\n-07109B Filename Length       006E (110)\n-07109D Extra Length          0009 (9)\n-07109F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7109F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07110D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07110F   Length              0005 (5)\n-071111   Flags               01 (1) 'Modification'\n-071112   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-071116 PAYLOAD\n-\n-0718AB DATA DESCRIPTOR       08074B50 (134695760)\n-0718AF CRC                   0B04A112 (184852754)\n-0718B3 Compressed Size       00000795 (1941)\n-0718B7 Uncompressed Size     00000795 (1941)\n-\n-0718BB LOCAL HEADER #214     04034B50 (67324752)\n-0718BF Extract Zip Spec      14 (20) '2.0'\n-0718C0 Extract OS            00 (0) 'MS-DOS'\n-0718C1 General Purpose Flag  0000 (0)\n-0718C3 Compression Method    0000 (0) 'Stored'\n-0718C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0718C9 CRC                   00000000 (0)\n-0718CD Compressed Size       00000000 (0)\n-0718D1 Uncompressed Size     00000000 (0)\n-0718D5 Filename Length       0031 (49)\n-0718D7 Extra Length          0009 (9)\n-0718D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x718D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07190A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07190C   Length              0005 (5)\n-07190E   Flags               01 (1) 'Modification'\n-07190F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071913 LOCAL HEADER #215     04034B50 (67324752)\n-071917 Extract Zip Spec      14 (20) '2.0'\n-071918 Extract OS            00 (0) 'MS-DOS'\n-071919 General Purpose Flag  0000 (0)\n-07191B Compression Method    0000 (0) 'Stored'\n-07191D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071921 CRC                   00000000 (0)\n-071925 Compressed Size       00000000 (0)\n-071929 Uncompressed Size     00000000 (0)\n-07192D Filename Length       003A (58)\n-07192F Extra Length          0009 (9)\n-071931 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71931: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07196B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07196D   Length              0005 (5)\n-07196F   Flags               01 (1) 'Modification'\n-071970   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071974 LOCAL HEADER #216     04034B50 (67324752)\n-071978 Extract Zip Spec      14 (20) '2.0'\n-071979 Extract OS            00 (0) 'MS-DOS'\n-07197A General Purpose Flag  0000 (0)\n-07197C Compression Method    0000 (0) 'Stored'\n-07197E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071982 CRC                   00000000 (0)\n-071986 Compressed Size       00000000 (0)\n-07198A Uncompressed Size     00000000 (0)\n-07198E Filename Length       006C (108)\n-071990 Extra Length          0009 (9)\n-071992 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71992: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0719FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-071A00   Length              0005 (5)\n-071A02   Flags               01 (1) 'Modification'\n-071A03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-071A07 LOCAL HEADER #217     04034B50 (67324752)\n-071A0B Extract Zip Spec      14 (20) '2.0'\n-071A0C Extract OS            00 (0) 'MS-DOS'\n-071A0D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-071A0F Compression Method    0000 (0) 'Stored'\n-071A11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-071A15 CRC                   00000000 (0)\n-071A19 Compressed Size       00000000 (0)\n-071A1D Uncompressed Size     00000000 (0)\n-071A21 Filename Length       0082 (130)\n-071A23 Extra Length          0009 (9)\n-071A25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x71A25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-071AA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-071AA9   Length              0005 (5)\n-071AAB   Flags               01 (1) 'Modification'\n-071AAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-071AB0 PAYLOAD\n-\n-07235B DATA DESCRIPTOR       08074B50 (134695760)\n-07235F CRC                   9A51A289 (2589041289)\n-072363 Compressed Size       000008AB (2219)\n-072367 Uncompressed Size     000008AB (2219)\n-\n-07236B LOCAL HEADER #218     04034B50 (67324752)\n-07236F Extract Zip Spec      14 (20) '2.0'\n-072370 Extract OS            00 (0) 'MS-DOS'\n-072371 General Purpose Flag  0000 (0)\n-072373 Compression Method    0000 (0) 'Stored'\n-072375 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072379 CRC                   00000000 (0)\n-07237D Compressed Size       00000000 (0)\n-072381 Uncompressed Size     00000000 (0)\n-072385 Filename Length       0022 (34)\n-072387 Extra Length          0009 (9)\n-072389 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72389: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0723AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0723AD   Length              0005 (5)\n-0723AF   Flags               01 (1) 'Modification'\n-0723B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0723B4 LOCAL HEADER #219     04034B50 (67324752)\n-0723B8 Extract Zip Spec      14 (20) '2.0'\n-0723B9 Extract OS            00 (0) 'MS-DOS'\n-0723BA General Purpose Flag  0000 (0)\n-0723BC Compression Method    0000 (0) 'Stored'\n-0723BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0723C2 CRC                   00000000 (0)\n-0723C6 Compressed Size       00000000 (0)\n-0723CA Uncompressed Size     00000000 (0)\n-0723CE Filename Length       002B (43)\n-0723D0 Extra Length          0009 (9)\n-0723D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x723D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0723FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0723FF   Length              0005 (5)\n-072401   Flags               01 (1) 'Modification'\n-072402   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-072406 LOCAL HEADER #220     04034B50 (67324752)\n-07240A Extract Zip Spec      14 (20) '2.0'\n-07240B Extract OS            00 (0) 'MS-DOS'\n-07240C General Purpose Flag  0000 (0)\n-07240E Compression Method    0000 (0) 'Stored'\n-072410 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072414 CRC                   00000000 (0)\n-072418 Compressed Size       00000000 (0)\n-07241C Uncompressed Size     00000000 (0)\n-072420 Filename Length       004D (77)\n-072422 Extra Length          0009 (9)\n-072424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-072471 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-072473   Length              0005 (5)\n-072475   Flags               01 (1) 'Modification'\n-072476   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-07247A LOCAL HEADER #221     04034B50 (67324752)\n-07247E Extract Zip Spec      14 (20) '2.0'\n-07247F Extract OS            00 (0) 'MS-DOS'\n-072480 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-072482 Compression Method    0000 (0) 'Stored'\n-072484 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-072488 CRC                   00000000 (0)\n-07248C Compressed Size       00000000 (0)\n-072490 Uncompressed Size     00000000 (0)\n-072494 Filename Length       0063 (99)\n-072496 Extra Length          0009 (9)\n-072498 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x72498: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0724FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0724FD   Length              0005 (5)\n-0724FF   Flags               01 (1) 'Modification'\n-072500   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-072504 PAYLOAD\n-\n-075E73 DATA DESCRIPTOR       08074B50 (134695760)\n-075E77 CRC                   BEAE3D9C (3199090076)\n-075E7B Compressed Size       0000396F (14703)\n-075E7F Uncompressed Size     0000396F (14703)\n-\n-075E83 LOCAL HEADER #222     04034B50 (67324752)\n-075E87 Extract Zip Spec      14 (20) '2.0'\n-075E88 Extract OS            00 (0) 'MS-DOS'\n-075E89 General Purpose Flag  0000 (0)\n-075E8B Compression Method    0000 (0) 'Stored'\n-075E8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-075E91 CRC                   00000000 (0)\n-075E95 Compressed Size       00000000 (0)\n-075E99 Uncompressed Size     00000000 (0)\n-075E9D Filename Length       0030 (48)\n-075E9F Extra Length          0009 (9)\n-075EA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75EA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-075ED1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-075ED3   Length              0005 (5)\n-075ED5   Flags               01 (1) 'Modification'\n-075ED6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-075EDA LOCAL HEADER #223     04034B50 (67324752)\n-075EDE Extract Zip Spec      14 (20) '2.0'\n-075EDF Extract OS            00 (0) 'MS-DOS'\n-075EE0 General Purpose Flag  0000 (0)\n-075EE2 Compression Method    0000 (0) 'Stored'\n-075EE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-075EE8 CRC                   00000000 (0)\n-075EEC Compressed Size       00000000 (0)\n-075EF0 Uncompressed Size     00000000 (0)\n-075EF4 Filename Length       0039 (57)\n-075EF6 Extra Length          0009 (9)\n-075EF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75EF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-075F31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-075F33   Length              0005 (5)\n-075F35   Flags               01 (1) 'Modification'\n-075F36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-075F3A LOCAL HEADER #224     04034B50 (67324752)\n-075F3E Extract Zip Spec      14 (20) '2.0'\n-075F3F Extract OS            00 (0) 'MS-DOS'\n-075F40 General Purpose Flag  0000 (0)\n-075F42 Compression Method    0000 (0) 'Stored'\n-075F44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-075F48 CRC                   00000000 (0)\n-075F4C Compressed Size       00000000 (0)\n-075F50 Uncompressed Size     00000000 (0)\n-075F54 Filename Length       006A (106)\n-075F56 Extra Length          0009 (9)\n-075F58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75F58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-075FC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-075FC4   Length              0005 (5)\n-075FC6   Flags               01 (1) 'Modification'\n-075FC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-075FCB LOCAL HEADER #225     04034B50 (67324752)\n-075FCF Extract Zip Spec      14 (20) '2.0'\n-075FD0 Extract OS            00 (0) 'MS-DOS'\n-075FD1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-075FD3 Compression Method    0000 (0) 'Stored'\n-075FD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-075FD9 CRC                   00000000 (0)\n-075FDD Compressed Size       00000000 (0)\n-075FE1 Uncompressed Size     00000000 (0)\n-075FE5 Filename Length       0080 (128)\n-075FE7 Extra Length          0009 (9)\n-075FE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x75FE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-076069 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07606B   Length              0005 (5)\n-07606D   Flags               01 (1) 'Modification'\n-07606E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-076072 PAYLOAD\n-\n-078493 DATA DESCRIPTOR       08074B50 (134695760)\n-078497 CRC                   29D620BA (701898938)\n-07849B Compressed Size       00002421 (9249)\n-07849F Uncompressed Size     00002421 (9249)\n-\n-0784A3 LOCAL HEADER #226     04034B50 (67324752)\n-0784A7 Extract Zip Spec      14 (20) '2.0'\n-0784A8 Extract OS            00 (0) 'MS-DOS'\n-0784A9 General Purpose Flag  0000 (0)\n-0784AB Compression Method    0000 (0) 'Stored'\n-0784AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0784B1 CRC                   00000000 (0)\n-0784B5 Compressed Size       00000000 (0)\n-0784B9 Uncompressed Size     00000000 (0)\n-0784BD Filename Length       003C (60)\n-0784BF Extra Length          0009 (9)\n-0784C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x784C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0784FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0784FF   Length              0005 (5)\n-078501   Flags               01 (1) 'Modification'\n-078502   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-078506 LOCAL HEADER #227     04034B50 (67324752)\n-07850A Extract Zip Spec      14 (20) '2.0'\n-07850B Extract OS            00 (0) 'MS-DOS'\n-07850C General Purpose Flag  0000 (0)\n-07850E Compression Method    0000 (0) 'Stored'\n-078510 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-078514 CRC                   00000000 (0)\n-078518 Compressed Size       00000000 (0)\n-07851C Uncompressed Size     00000000 (0)\n-078520 Filename Length       0045 (69)\n-078522 Extra Length          0009 (9)\n-078524 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x78524: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-078569 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07856B   Length              0005 (5)\n-07856D   Flags               01 (1) 'Modification'\n-07856E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-078572 LOCAL HEADER #228     04034B50 (67324752)\n-078576 Extract Zip Spec      14 (20) '2.0'\n-078577 Extract OS            00 (0) 'MS-DOS'\n-078578 General Purpose Flag  0000 (0)\n-07857A Compression Method    0000 (0) 'Stored'\n-07857C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-078580 CRC                   00000000 (0)\n-078584 Compressed Size       00000000 (0)\n-078588 Uncompressed Size     00000000 (0)\n-07858C Filename Length       0063 (99)\n-07858E Extra Length          0009 (9)\n-078590 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x78590: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0785F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0785F5   Length              0005 (5)\n-0785F7   Flags               01 (1) 'Modification'\n-0785F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0785FC LOCAL HEADER #229     04034B50 (67324752)\n-078600 Extract Zip Spec      14 (20) '2.0'\n-078601 Extract OS            00 (0) 'MS-DOS'\n-078602 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-078604 Compression Method    0000 (0) 'Stored'\n-078606 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07860A CRC                   00000000 (0)\n-07860E Compressed Size       00000000 (0)\n-078612 Uncompressed Size     00000000 (0)\n-078616 Filename Length       0079 (121)\n-078618 Extra Length          0009 (9)\n-07861A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7861A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-078693 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-078695   Length              0005 (5)\n-078697   Flags               01 (1) 'Modification'\n-078698   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07869C PAYLOAD\n-\n-07BD83 DATA DESCRIPTOR       08074B50 (134695760)\n-07BD87 CRC                   9ED7BE90 (2664939152)\n-07BD8B Compressed Size       000036E7 (14055)\n-07BD8F Uncompressed Size     000036E7 (14055)\n-\n-07BD93 LOCAL HEADER #230     04034B50 (67324752)\n-07BD97 Extract Zip Spec      14 (20) '2.0'\n-07BD98 Extract OS            00 (0) 'MS-DOS'\n-07BD99 General Purpose Flag  0000 (0)\n-07BD9B Compression Method    0000 (0) 'Stored'\n-07BD9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07BDA1 CRC                   00000000 (0)\n-07BDA5 Compressed Size       00000000 (0)\n-07BDA9 Uncompressed Size     00000000 (0)\n-07BDAD Filename Length       0063 (99)\n-07BDAF Extra Length          0009 (9)\n-07BDB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7BDB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07BE14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07BE16   Length              0005 (5)\n-07BE18   Flags               01 (1) 'Modification'\n-07BE19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-07BE1D LOCAL HEADER #231     04034B50 (67324752)\n-07BE21 Extract Zip Spec      14 (20) '2.0'\n-07BE22 Extract OS            00 (0) 'MS-DOS'\n-07BE23 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-07BE25 Compression Method    0000 (0) 'Stored'\n-07BE27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07BE2B CRC                   00000000 (0)\n-07BE2F Compressed Size       00000000 (0)\n-07BE33 Uncompressed Size     00000000 (0)\n-07BE37 Filename Length       0079 (121)\n-07BE39 Extra Length          0009 (9)\n-07BE3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7BE3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07BEB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07BEB6   Length              0005 (5)\n-07BEB8   Flags               01 (1) 'Modification'\n-07BEB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07BEBD PAYLOAD\n-\n-08064F DATA DESCRIPTOR       08074B50 (134695760)\n-080653 CRC                   B51FDD91 (3038764433)\n-080657 Compressed Size       00004792 (18322)\n-08065B Uncompressed Size     00004792 (18322)\n-\n-08065F LOCAL HEADER #232     04034B50 (67324752)\n-080663 Extract Zip Spec      14 (20) '2.0'\n-080664 Extract OS            00 (0) 'MS-DOS'\n-080665 General Purpose Flag  0000 (0)\n-080667 Compression Method    0000 (0) 'Stored'\n-080669 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08066D CRC                   00000000 (0)\n-080671 Compressed Size       00000000 (0)\n-080675 Uncompressed Size     00000000 (0)\n-080679 Filename Length       0065 (101)\n-08067B Extra Length          0009 (9)\n-08067D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8067D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0806E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0806E4   Length              0005 (5)\n-0806E6   Flags               01 (1) 'Modification'\n-0806E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0806EB LOCAL HEADER #233     04034B50 (67324752)\n-0806EF Extract Zip Spec      14 (20) '2.0'\n-0806F0 Extract OS            00 (0) 'MS-DOS'\n-0806F1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0806F3 Compression Method    0000 (0) 'Stored'\n-0806F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0806F9 CRC                   00000000 (0)\n-0806FD Compressed Size       00000000 (0)\n-080701 Uncompressed Size     00000000 (0)\n-080705 Filename Length       007B (123)\n-080707 Extra Length          0009 (9)\n-080709 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x80709: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-080784 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-080786   Length              0005 (5)\n-080788   Flags               01 (1) 'Modification'\n-080789   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08078D PAYLOAD\n-\n-086569 DATA DESCRIPTOR       08074B50 (134695760)\n-08656D CRC                   27CFA48B (667919499)\n-086571 Compressed Size       00005DDC (24028)\n-086575 Uncompressed Size     00005DDC (24028)\n-\n-086579 LOCAL HEADER #234     04034B50 (67324752)\n-08657D Extract Zip Spec      14 (20) '2.0'\n-08657E Extract OS            00 (0) 'MS-DOS'\n-08657F General Purpose Flag  0000 (0)\n-086581 Compression Method    0000 (0) 'Stored'\n-086583 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-086587 CRC                   00000000 (0)\n-08658B Compressed Size       00000000 (0)\n-08658F Uncompressed Size     00000000 (0)\n-086593 Filename Length       0069 (105)\n-086595 Extra Length          0009 (9)\n-086597 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x86597: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-086600 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-086602   Length              0005 (5)\n-086604   Flags               01 (1) 'Modification'\n-086605   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-086609 LOCAL HEADER #235     04034B50 (67324752)\n-08660D Extract Zip Spec      14 (20) '2.0'\n-08660E Extract OS            00 (0) 'MS-DOS'\n-08660F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-086611 Compression Method    0000 (0) 'Stored'\n-086613 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-086617 CRC                   00000000 (0)\n-08661B Compressed Size       00000000 (0)\n-08661F Uncompressed Size     00000000 (0)\n-086623 Filename Length       007F (127)\n-086625 Extra Length          0009 (9)\n-086627 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x86627: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0866A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0866A8   Length              0005 (5)\n-0866AA   Flags               01 (1) 'Modification'\n-0866AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0866AF PAYLOAD\n-\n-08A1E9 DATA DESCRIPTOR       08074B50 (134695760)\n-08A1ED CRC                   620AB78F (1644869519)\n-08A1F1 Compressed Size       00003B3A (15162)\n-08A1F5 Uncompressed Size     00003B3A (15162)\n-\n-08A1F9 LOCAL HEADER #236     04034B50 (67324752)\n-08A1FD Extract Zip Spec      14 (20) '2.0'\n-08A1FE Extract OS            00 (0) 'MS-DOS'\n-08A1FF General Purpose Flag  0000 (0)\n-08A201 Compression Method    0000 (0) 'Stored'\n-08A203 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A207 CRC                   00000000 (0)\n-08A20B Compressed Size       00000000 (0)\n-08A20F Uncompressed Size     00000000 (0)\n-08A213 Filename Length       0069 (105)\n-08A215 Extra Length          0009 (9)\n-08A217 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A217: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A282   Length              0005 (5)\n-08A284   Flags               01 (1) 'Modification'\n-08A285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08A289 LOCAL HEADER #237     04034B50 (67324752)\n-08A28D Extract Zip Spec      14 (20) '2.0'\n-08A28E Extract OS            00 (0) 'MS-DOS'\n-08A28F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08A291 Compression Method    0000 (0) 'Stored'\n-08A293 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08A297 CRC                   00000000 (0)\n-08A29B Compressed Size       00000000 (0)\n-08A29F Uncompressed Size     00000000 (0)\n-08A2A3 Filename Length       007F (127)\n-08A2A5 Extra Length          0009 (9)\n-08A2A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A2A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A328   Length              0005 (5)\n-08A32A   Flags               01 (1) 'Modification'\n-08A32B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08A32F PAYLOAD\n-\n-08EB98 DATA DESCRIPTOR       08074B50 (134695760)\n-08EB9C CRC                   937A07E6 (2474248166)\n-08EBA0 Compressed Size       00004869 (18537)\n-08EBA4 Uncompressed Size     00004869 (18537)\n-\n-08EBA8 LOCAL HEADER #238     04034B50 (67324752)\n-08EBAC Extract Zip Spec      14 (20) '2.0'\n-08EBAD Extract OS            00 (0) 'MS-DOS'\n-08EBAE General Purpose Flag  0000 (0)\n-08EBB0 Compression Method    0000 (0) 'Stored'\n-08EBB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EBB6 CRC                   00000000 (0)\n-08EBBA Compressed Size       00000000 (0)\n-08EBBE Uncompressed Size     00000000 (0)\n-08EBC2 Filename Length       006D (109)\n-08EBC4 Extra Length          0009 (9)\n-08EBC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EBC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08EC33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08EC35   Length              0005 (5)\n-08EC37   Flags               01 (1) 'Modification'\n-08EC38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08EC3C LOCAL HEADER #239     04034B50 (67324752)\n-08EC40 Extract Zip Spec      14 (20) '2.0'\n-08EC41 Extract OS            00 (0) 'MS-DOS'\n-08EC42 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08EC44 Compression Method    0000 (0) 'Stored'\n-08EC46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08EC4A CRC                   00000000 (0)\n-08EC4E Compressed Size       00000000 (0)\n-08EC52 Uncompressed Size     00000000 (0)\n-08EC56 Filename Length       0083 (131)\n-08EC58 Extra Length          0009 (9)\n-08EC5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EC5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08ECDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08ECDF   Length              0005 (5)\n-08ECE1   Flags               01 (1) 'Modification'\n-08ECE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08ECE6 PAYLOAD\n-\n-08F7C5 DATA DESCRIPTOR       08074B50 (134695760)\n-08F7C9 CRC                   53DFF1D7 (1407185367)\n-08F7CD Compressed Size       00000ADF (2783)\n-08F7D1 Uncompressed Size     00000ADF (2783)\n-\n-08F7D5 LOCAL HEADER #240     04034B50 (67324752)\n-08F7D9 Extract Zip Spec      14 (20) '2.0'\n-08F7DA Extract OS            00 (0) 'MS-DOS'\n-08F7DB General Purpose Flag  0000 (0)\n-08F7DD Compression Method    0000 (0) 'Stored'\n-08F7DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F7E3 CRC                   00000000 (0)\n-08F7E7 Compressed Size       00000000 (0)\n-08F7EB Uncompressed Size     00000000 (0)\n-08F7EF Filename Length       0069 (105)\n-08F7F1 Extra Length          0009 (9)\n-08F7F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F7F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F85C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F85E   Length              0005 (5)\n-08F860   Flags               01 (1) 'Modification'\n-08F861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-08F865 LOCAL HEADER #241     04034B50 (67324752)\n-08F869 Extract Zip Spec      14 (20) '2.0'\n-08F86A Extract OS            00 (0) 'MS-DOS'\n-08F86B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-08F86D Compression Method    0000 (0) 'Stored'\n-08F86F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08F873 CRC                   00000000 (0)\n-08F877 Compressed Size       00000000 (0)\n-08F87B Uncompressed Size     00000000 (0)\n-08F87F Filename Length       007F (127)\n-08F881 Extra Length          0009 (9)\n-08F883 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8F883: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08F902 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08F904   Length              0005 (5)\n-08F906   Flags               01 (1) 'Modification'\n-08F907   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08F90B PAYLOAD\n-\n-090244 DATA DESCRIPTOR       08074B50 (134695760)\n-090248 CRC                   6D3A5445 (1832539205)\n-09024C Compressed Size       00000939 (2361)\n-090250 Uncompressed Size     00000939 (2361)\n-\n-090254 LOCAL HEADER #242     04034B50 (67324752)\n-090258 Extract Zip Spec      14 (20) '2.0'\n-090259 Extract OS            00 (0) 'MS-DOS'\n-09025A General Purpose Flag  0000 (0)\n-09025C Compression Method    0000 (0) 'Stored'\n-09025E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090262 CRC                   00000000 (0)\n-090266 Compressed Size       00000000 (0)\n-09026A Uncompressed Size     00000000 (0)\n-09026E Filename Length       0078 (120)\n-090270 Extra Length          0009 (9)\n-090272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x90272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0902EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0902EC   Length              0005 (5)\n-0902EE   Flags               01 (1) 'Modification'\n-0902EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0902F3 LOCAL HEADER #243     04034B50 (67324752)\n-0902F7 Extract Zip Spec      14 (20) '2.0'\n-0902F8 Extract OS            00 (0) 'MS-DOS'\n-0902F9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0902FB Compression Method    0000 (0) 'Stored'\n-0902FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-090301 CRC                   00000000 (0)\n-090305 Compressed Size       00000000 (0)\n-090309 Uncompressed Size     00000000 (0)\n-09030D Filename Length       008E (142)\n-09030F Extra Length          0009 (9)\n-090311 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+05CC01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05CC03   Length              0005 (5)\n+05CC05   Flags               01 (1) 'Modification'\n+05CC06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05CC0A PAYLOAD\n+\n+066847 DATA DESCRIPTOR       08074B50 (134695760)\n+06684B CRC                   AD150348 (2903835464)\n+06684F Compressed Size       00009C3D (39997)\n+066853 Uncompressed Size     00009C3D (39997)\n+\n+066857 LOCAL HEADER #184     04034B50 (67324752)\n+06685B Extract Zip Spec      14 (20) '2.0'\n+06685C Extract OS            00 (0) 'MS-DOS'\n+06685D General Purpose Flag  0000 (0)\n+06685F Compression Method    0000 (0) 'Stored'\n+066861 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+066865 CRC                   00000000 (0)\n+066869 Compressed Size       00000000 (0)\n+06686D Uncompressed Size     00000000 (0)\n+066871 Filename Length       006A (106)\n+066873 Extra Length          0009 (9)\n+066875 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66875: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0668DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0668E1   Length              0005 (5)\n+0668E3   Flags               01 (1) 'Modification'\n+0668E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0668E8 LOCAL HEADER #185     04034B50 (67324752)\n+0668EC Extract Zip Spec      14 (20) '2.0'\n+0668ED Extract OS            00 (0) 'MS-DOS'\n+0668EE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0668F0 Compression Method    0000 (0) 'Stored'\n+0668F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0668F6 CRC                   00000000 (0)\n+0668FA Compressed Size       00000000 (0)\n+0668FE Uncompressed Size     00000000 (0)\n+066902 Filename Length       0080 (128)\n+066904 Extra Length          0009 (9)\n+066906 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x66906: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+066986 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+066988   Length              0005 (5)\n+06698A   Flags               01 (1) 'Modification'\n+06698B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06698F PAYLOAD\n+\n+0695DB DATA DESCRIPTOR       08074B50 (134695760)\n+0695DF CRC                   8BF94713 (2348369683)\n+0695E3 Compressed Size       00002C4C (11340)\n+0695E7 Uncompressed Size     00002C4C (11340)\n+\n+0695EB LOCAL HEADER #186     04034B50 (67324752)\n+0695EF Extract Zip Spec      14 (20) '2.0'\n+0695F0 Extract OS            00 (0) 'MS-DOS'\n+0695F1 General Purpose Flag  0000 (0)\n+0695F3 Compression Method    0000 (0) 'Stored'\n+0695F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0695F9 CRC                   00000000 (0)\n+0695FD Compressed Size       00000000 (0)\n+069601 Uncompressed Size     00000000 (0)\n+069605 Filename Length       002E (46)\n+069607 Extra Length          0009 (9)\n+069609 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x69609: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069637 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+069639   Length              0005 (5)\n+06963B   Flags               01 (1) 'Modification'\n+06963C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+069640 LOCAL HEADER #187     04034B50 (67324752)\n+069644 Extract Zip Spec      14 (20) '2.0'\n+069645 Extract OS            00 (0) 'MS-DOS'\n+069646 General Purpose Flag  0000 (0)\n+069648 Compression Method    0000 (0) 'Stored'\n+06964A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06964E CRC                   00000000 (0)\n+069652 Compressed Size       00000000 (0)\n+069656 Uncompressed Size     00000000 (0)\n+06965A Filename Length       0037 (55)\n+06965C Extra Length          0009 (9)\n+06965E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6965E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+069695 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+069697   Length              0005 (5)\n+069699   Flags               01 (1) 'Modification'\n+06969A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06969E LOCAL HEADER #188     04034B50 (67324752)\n+0696A2 Extract Zip Spec      14 (20) '2.0'\n+0696A3 Extract OS            00 (0) 'MS-DOS'\n+0696A4 General Purpose Flag  0000 (0)\n+0696A6 Compression Method    0000 (0) 'Stored'\n+0696A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0696AC CRC                   00000000 (0)\n+0696B0 Compressed Size       00000000 (0)\n+0696B4 Uncompressed Size     00000000 (0)\n+0696B8 Filename Length       0060 (96)\n+0696BA Extra Length          0009 (9)\n+0696BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x696BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06971C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06971E   Length              0005 (5)\n+069720   Flags               01 (1) 'Modification'\n+069721   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+069725 LOCAL HEADER #189     04034B50 (67324752)\n+069729 Extract Zip Spec      14 (20) '2.0'\n+06972A Extract OS            00 (0) 'MS-DOS'\n+06972B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06972D Compression Method    0000 (0) 'Stored'\n+06972F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+069733 CRC                   00000000 (0)\n+069737 Compressed Size       00000000 (0)\n+06973B Uncompressed Size     00000000 (0)\n+06973F Filename Length       0076 (118)\n+069741 Extra Length          0009 (9)\n+069743 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x69743: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0697B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0697BB   Length              0005 (5)\n+0697BD   Flags               01 (1) 'Modification'\n+0697BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0697C2 PAYLOAD\n+\n+06A6BC DATA DESCRIPTOR       08074B50 (134695760)\n+06A6C0 CRC                   42E654D4 (1122391252)\n+06A6C4 Compressed Size       00000EFA (3834)\n+06A6C8 Uncompressed Size     00000EFA (3834)\n+\n+06A6CC LOCAL HEADER #190     04034B50 (67324752)\n+06A6D0 Extract Zip Spec      14 (20) '2.0'\n+06A6D1 Extract OS            00 (0) 'MS-DOS'\n+06A6D2 General Purpose Flag  0000 (0)\n+06A6D4 Compression Method    0000 (0) 'Stored'\n+06A6D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A6DA CRC                   00000000 (0)\n+06A6DE Compressed Size       00000000 (0)\n+06A6E2 Uncompressed Size     00000000 (0)\n+06A6E6 Filename Length       0066 (102)\n+06A6E8 Extra Length          0009 (9)\n+06A6EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A6EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A750 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A752   Length              0005 (5)\n+06A754   Flags               01 (1) 'Modification'\n+06A755   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06A759 LOCAL HEADER #191     04034B50 (67324752)\n+06A75D Extract Zip Spec      14 (20) '2.0'\n+06A75E Extract OS            00 (0) 'MS-DOS'\n+06A75F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06A761 Compression Method    0000 (0) 'Stored'\n+06A763 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A767 CRC                   00000000 (0)\n+06A76B Compressed Size       00000000 (0)\n+06A76F Uncompressed Size     00000000 (0)\n+06A773 Filename Length       007C (124)\n+06A775 Extra Length          0009 (9)\n+06A777 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A777: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06A7F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06A7F5   Length              0005 (5)\n+06A7F7   Flags               01 (1) 'Modification'\n+06A7F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06A7FC PAYLOAD\n+\n+06BED3 DATA DESCRIPTOR       08074B50 (134695760)\n+06BED7 CRC                   51B4F745 (1370814277)\n+06BEDB Compressed Size       000016D7 (5847)\n+06BEDF Uncompressed Size     000016D7 (5847)\n+\n+06BEE3 LOCAL HEADER #192     04034B50 (67324752)\n+06BEE7 Extract Zip Spec      14 (20) '2.0'\n+06BEE8 Extract OS            00 (0) 'MS-DOS'\n+06BEE9 General Purpose Flag  0000 (0)\n+06BEEB Compression Method    0000 (0) 'Stored'\n+06BEED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BEF1 CRC                   00000000 (0)\n+06BEF5 Compressed Size       00000000 (0)\n+06BEF9 Uncompressed Size     00000000 (0)\n+06BEFD Filename Length       0026 (38)\n+06BEFF Extra Length          0009 (9)\n+06BF01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BF01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BF27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BF29   Length              0005 (5)\n+06BF2B   Flags               01 (1) 'Modification'\n+06BF2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06BF30 LOCAL HEADER #193     04034B50 (67324752)\n+06BF34 Extract Zip Spec      14 (20) '2.0'\n+06BF35 Extract OS            00 (0) 'MS-DOS'\n+06BF36 General Purpose Flag  0000 (0)\n+06BF38 Compression Method    0000 (0) 'Stored'\n+06BF3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BF3E CRC                   00000000 (0)\n+06BF42 Compressed Size       00000000 (0)\n+06BF46 Uncompressed Size     00000000 (0)\n+06BF4A Filename Length       002F (47)\n+06BF4C Extra Length          0009 (9)\n+06BF4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BF4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06BF7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06BF7F   Length              0005 (5)\n+06BF81   Flags               01 (1) 'Modification'\n+06BF82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06BF86 LOCAL HEADER #194     04034B50 (67324752)\n+06BF8A Extract Zip Spec      14 (20) '2.0'\n+06BF8B Extract OS            00 (0) 'MS-DOS'\n+06BF8C General Purpose Flag  0000 (0)\n+06BF8E Compression Method    0000 (0) 'Stored'\n+06BF90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06BF94 CRC                   00000000 (0)\n+06BF98 Compressed Size       00000000 (0)\n+06BF9C Uncompressed Size     00000000 (0)\n+06BFA0 Filename Length       005E (94)\n+06BFA2 Extra Length          0009 (9)\n+06BFA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6BFA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C002 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C004   Length              0005 (5)\n+06C006   Flags               01 (1) 'Modification'\n+06C007   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06C00B LOCAL HEADER #195     04034B50 (67324752)\n+06C00F Extract Zip Spec      14 (20) '2.0'\n+06C010 Extract OS            00 (0) 'MS-DOS'\n+06C011 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06C013 Compression Method    0000 (0) 'Stored'\n+06C015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C019 CRC                   00000000 (0)\n+06C01D Compressed Size       00000000 (0)\n+06C021 Uncompressed Size     00000000 (0)\n+06C025 Filename Length       0074 (116)\n+06C027 Extra Length          0009 (9)\n+06C029 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C029: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C09D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C09F   Length              0005 (5)\n+06C0A1   Flags               01 (1) 'Modification'\n+06C0A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06C0A6 PAYLOAD\n+\n+06C76C DATA DESCRIPTOR       08074B50 (134695760)\n+06C770 CRC                   357DA477 (897426551)\n+06C774 Compressed Size       000006C6 (1734)\n+06C778 Uncompressed Size     000006C6 (1734)\n+\n+06C77C LOCAL HEADER #196     04034B50 (67324752)\n+06C780 Extract Zip Spec      14 (20) '2.0'\n+06C781 Extract OS            00 (0) 'MS-DOS'\n+06C782 General Purpose Flag  0000 (0)\n+06C784 Compression Method    0000 (0) 'Stored'\n+06C786 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C78A CRC                   00000000 (0)\n+06C78E Compressed Size       00000000 (0)\n+06C792 Uncompressed Size     00000000 (0)\n+06C796 Filename Length       005B (91)\n+06C798 Extra Length          0009 (9)\n+06C79A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C79A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C7F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C7F7   Length              0005 (5)\n+06C7F9   Flags               01 (1) 'Modification'\n+06C7FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06C7FE LOCAL HEADER #197     04034B50 (67324752)\n+06C802 Extract Zip Spec      14 (20) '2.0'\n+06C803 Extract OS            00 (0) 'MS-DOS'\n+06C804 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06C806 Compression Method    0000 (0) 'Stored'\n+06C808 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06C80C CRC                   00000000 (0)\n+06C810 Compressed Size       00000000 (0)\n+06C814 Uncompressed Size     00000000 (0)\n+06C818 Filename Length       0071 (113)\n+06C81A Extra Length          0009 (9)\n+06C81C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6C81C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06C88D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06C88F   Length              0005 (5)\n+06C891   Flags               01 (1) 'Modification'\n+06C892   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06C896 PAYLOAD\n+\n+06D252 DATA DESCRIPTOR       08074B50 (134695760)\n+06D256 CRC                   F9CAC97B (4190816635)\n+06D25A Compressed Size       000009BC (2492)\n+06D25E Uncompressed Size     000009BC (2492)\n+\n+06D262 LOCAL HEADER #198     04034B50 (67324752)\n+06D266 Extract Zip Spec      14 (20) '2.0'\n+06D267 Extract OS            00 (0) 'MS-DOS'\n+06D268 General Purpose Flag  0000 (0)\n+06D26A Compression Method    0000 (0) 'Stored'\n+06D26C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D270 CRC                   00000000 (0)\n+06D274 Compressed Size       00000000 (0)\n+06D278 Uncompressed Size     00000000 (0)\n+06D27C Filename Length       0061 (97)\n+06D27E Extra Length          0009 (9)\n+06D280 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D280: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D2E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D2E3   Length              0005 (5)\n+06D2E5   Flags               01 (1) 'Modification'\n+06D2E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06D2EA LOCAL HEADER #199     04034B50 (67324752)\n+06D2EE Extract Zip Spec      14 (20) '2.0'\n+06D2EF Extract OS            00 (0) 'MS-DOS'\n+06D2F0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06D2F2 Compression Method    0000 (0) 'Stored'\n+06D2F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06D2F8 CRC                   00000000 (0)\n+06D2FC Compressed Size       00000000 (0)\n+06D300 Uncompressed Size     00000000 (0)\n+06D304 Filename Length       0077 (119)\n+06D306 Extra Length          0009 (9)\n+06D308 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6D308: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06D37F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06D381   Length              0005 (5)\n+06D383   Flags               01 (1) 'Modification'\n+06D384   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06D388 PAYLOAD\n+\n+06DD8F DATA DESCRIPTOR       08074B50 (134695760)\n+06DD93 CRC                   9DEB8C8B (2649459851)\n+06DD97 Compressed Size       00000A07 (2567)\n+06DD9B Uncompressed Size     00000A07 (2567)\n+\n+06DD9F LOCAL HEADER #200     04034B50 (67324752)\n+06DDA3 Extract Zip Spec      14 (20) '2.0'\n+06DDA4 Extract OS            00 (0) 'MS-DOS'\n+06DDA5 General Purpose Flag  0000 (0)\n+06DDA7 Compression Method    0000 (0) 'Stored'\n+06DDA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DDAD CRC                   00000000 (0)\n+06DDB1 Compressed Size       00000000 (0)\n+06DDB5 Uncompressed Size     00000000 (0)\n+06DDB9 Filename Length       005B (91)\n+06DDBB Extra Length          0009 (9)\n+06DDBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DDBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DE18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DE1A   Length              0005 (5)\n+06DE1C   Flags               01 (1) 'Modification'\n+06DE1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06DE21 LOCAL HEADER #201     04034B50 (67324752)\n+06DE25 Extract Zip Spec      14 (20) '2.0'\n+06DE26 Extract OS            00 (0) 'MS-DOS'\n+06DE27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06DE29 Compression Method    0000 (0) 'Stored'\n+06DE2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06DE2F CRC                   00000000 (0)\n+06DE33 Compressed Size       00000000 (0)\n+06DE37 Uncompressed Size     00000000 (0)\n+06DE3B Filename Length       0071 (113)\n+06DE3D Extra Length          0009 (9)\n+06DE3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6DE3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06DEB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06DEB2   Length              0005 (5)\n+06DEB4   Flags               01 (1) 'Modification'\n+06DEB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06DEB9 PAYLOAD\n+\n+06EC97 DATA DESCRIPTOR       08074B50 (134695760)\n+06EC9B CRC                   85B17459 (2242999385)\n+06EC9F Compressed Size       00000DDE (3550)\n+06ECA3 Uncompressed Size     00000DDE (3550)\n+\n+06ECA7 LOCAL HEADER #202     04034B50 (67324752)\n+06ECAB Extract Zip Spec      14 (20) '2.0'\n+06ECAC Extract OS            00 (0) 'MS-DOS'\n+06ECAD General Purpose Flag  0000 (0)\n+06ECAF Compression Method    0000 (0) 'Stored'\n+06ECB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06ECB5 CRC                   00000000 (0)\n+06ECB9 Compressed Size       00000000 (0)\n+06ECBD Uncompressed Size     00000000 (0)\n+06ECC1 Filename Length       0066 (102)\n+06ECC3 Extra Length          0009 (9)\n+06ECC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6ECC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06ED2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06ED2D   Length              0005 (5)\n+06ED2F   Flags               01 (1) 'Modification'\n+06ED30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06ED34 LOCAL HEADER #203     04034B50 (67324752)\n+06ED38 Extract Zip Spec      14 (20) '2.0'\n+06ED39 Extract OS            00 (0) 'MS-DOS'\n+06ED3A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06ED3C Compression Method    0000 (0) 'Stored'\n+06ED3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06ED42 CRC                   00000000 (0)\n+06ED46 Compressed Size       00000000 (0)\n+06ED4A Uncompressed Size     00000000 (0)\n+06ED4E Filename Length       007C (124)\n+06ED50 Extra Length          0009 (9)\n+06ED52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6ED52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06EDCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06EDD0   Length              0005 (5)\n+06EDD2   Flags               01 (1) 'Modification'\n+06EDD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06EDD7 PAYLOAD\n+\n+06F3A6 DATA DESCRIPTOR       08074B50 (134695760)\n+06F3AA CRC                   9C229073 (2619510899)\n+06F3AE Compressed Size       000005CF (1487)\n+06F3B2 Uncompressed Size     000005CF (1487)\n+\n+06F3B6 LOCAL HEADER #204     04034B50 (67324752)\n+06F3BA Extract Zip Spec      14 (20) '2.0'\n+06F3BB Extract OS            00 (0) 'MS-DOS'\n+06F3BC General Purpose Flag  0000 (0)\n+06F3BE Compression Method    0000 (0) 'Stored'\n+06F3C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F3C4 CRC                   00000000 (0)\n+06F3C8 Compressed Size       00000000 (0)\n+06F3CC Uncompressed Size     00000000 (0)\n+06F3D0 Filename Length       0066 (102)\n+06F3D2 Extra Length          0009 (9)\n+06F3D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6F3D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06F43A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F43C   Length              0005 (5)\n+06F43E   Flags               01 (1) 'Modification'\n+06F43F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06F443 LOCAL HEADER #205     04034B50 (67324752)\n+06F447 Extract Zip Spec      14 (20) '2.0'\n+06F448 Extract OS            00 (0) 'MS-DOS'\n+06F449 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06F44B Compression Method    0000 (0) 'Stored'\n+06F44D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F451 CRC                   00000000 (0)\n+06F455 Compressed Size       00000000 (0)\n+06F459 Uncompressed Size     00000000 (0)\n+06F45D Filename Length       007C (124)\n+06F45F Extra Length          0009 (9)\n+06F461 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6F461: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06F4DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F4DF   Length              0005 (5)\n+06F4E1   Flags               01 (1) 'Modification'\n+06F4E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06F4E6 PAYLOAD\n+\n+06FAA8 DATA DESCRIPTOR       08074B50 (134695760)\n+06FAAC CRC                   A57691CD (2776011213)\n+06FAB0 Compressed Size       000005C2 (1474)\n+06FAB4 Uncompressed Size     000005C2 (1474)\n+\n+06FAB8 LOCAL HEADER #206     04034B50 (67324752)\n+06FABC Extract Zip Spec      14 (20) '2.0'\n+06FABD Extract OS            00 (0) 'MS-DOS'\n+06FABE General Purpose Flag  0000 (0)\n+06FAC0 Compression Method    0000 (0) 'Stored'\n+06FAC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06FAC6 CRC                   00000000 (0)\n+06FACA Compressed Size       00000000 (0)\n+06FACE Uncompressed Size     00000000 (0)\n+06FAD2 Filename Length       0065 (101)\n+06FAD4 Extra Length          0009 (9)\n+06FAD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6FAD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06FB3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06FB3D   Length              0005 (5)\n+06FB3F   Flags               01 (1) 'Modification'\n+06FB40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06FB44 LOCAL HEADER #207     04034B50 (67324752)\n+06FB48 Extract Zip Spec      14 (20) '2.0'\n+06FB49 Extract OS            00 (0) 'MS-DOS'\n+06FB4A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+06FB4C Compression Method    0000 (0) 'Stored'\n+06FB4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06FB52 CRC                   00000000 (0)\n+06FB56 Compressed Size       00000000 (0)\n+06FB5A Uncompressed Size     00000000 (0)\n+06FB5E Filename Length       007B (123)\n+06FB60 Extra Length          0009 (9)\n+06FB62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6FB62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06FBDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06FBDF   Length              0005 (5)\n+06FBE1   Flags               01 (1) 'Modification'\n+06FBE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06FBE6 PAYLOAD\n+\n+070320 DATA DESCRIPTOR       08074B50 (134695760)\n+070324 CRC                   6CD31445 (1825772613)\n+070328 Compressed Size       0000073A (1850)\n+07032C Uncompressed Size     0000073A (1850)\n+\n+070330 LOCAL HEADER #208     04034B50 (67324752)\n+070334 Extract Zip Spec      14 (20) '2.0'\n+070335 Extract OS            00 (0) 'MS-DOS'\n+070336 General Purpose Flag  0000 (0)\n+070338 Compression Method    0000 (0) 'Stored'\n+07033A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07033E CRC                   00000000 (0)\n+070342 Compressed Size       00000000 (0)\n+070346 Uncompressed Size     00000000 (0)\n+07034A Filename Length       0063 (99)\n+07034C Extra Length          0009 (9)\n+07034E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7034E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0703B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0703B3   Length              0005 (5)\n+0703B5   Flags               01 (1) 'Modification'\n+0703B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0703BA LOCAL HEADER #209     04034B50 (67324752)\n+0703BE Extract Zip Spec      14 (20) '2.0'\n+0703BF Extract OS            00 (0) 'MS-DOS'\n+0703C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0703C2 Compression Method    0000 (0) 'Stored'\n+0703C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0703C8 CRC                   00000000 (0)\n+0703CC Compressed Size       00000000 (0)\n+0703D0 Uncompressed Size     00000000 (0)\n+0703D4 Filename Length       0079 (121)\n+0703D6 Extra Length          0009 (9)\n+0703D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x703D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070451 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070453   Length              0005 (5)\n+070455   Flags               01 (1) 'Modification'\n+070456   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07045A PAYLOAD\n+\n+070EEC DATA DESCRIPTOR       08074B50 (134695760)\n+070EF0 CRC                   C97DF8D6 (3380476118)\n+070EF4 Compressed Size       00000A92 (2706)\n+070EF8 Uncompressed Size     00000A92 (2706)\n+\n+070EFC LOCAL HEADER #210     04034B50 (67324752)\n+070F00 Extract Zip Spec      14 (20) '2.0'\n+070F01 Extract OS            00 (0) 'MS-DOS'\n+070F02 General Purpose Flag  0000 (0)\n+070F04 Compression Method    0000 (0) 'Stored'\n+070F06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070F0A CRC                   00000000 (0)\n+070F0E Compressed Size       00000000 (0)\n+070F12 Uncompressed Size     00000000 (0)\n+070F16 Filename Length       0023 (35)\n+070F18 Extra Length          0009 (9)\n+070F1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70F1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070F3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070F3F   Length              0005 (5)\n+070F41   Flags               01 (1) 'Modification'\n+070F42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070F46 LOCAL HEADER #211     04034B50 (67324752)\n+070F4A Extract Zip Spec      14 (20) '2.0'\n+070F4B Extract OS            00 (0) 'MS-DOS'\n+070F4C General Purpose Flag  0000 (0)\n+070F4E Compression Method    0000 (0) 'Stored'\n+070F50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070F54 CRC                   00000000 (0)\n+070F58 Compressed Size       00000000 (0)\n+070F5C Uncompressed Size     00000000 (0)\n+070F60 Filename Length       002C (44)\n+070F62 Extra Length          0009 (9)\n+070F64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70F64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+070F90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+070F92   Length              0005 (5)\n+070F94   Flags               01 (1) 'Modification'\n+070F95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+070F99 LOCAL HEADER #212     04034B50 (67324752)\n+070F9D Extract Zip Spec      14 (20) '2.0'\n+070F9E Extract OS            00 (0) 'MS-DOS'\n+070F9F General Purpose Flag  0000 (0)\n+070FA1 Compression Method    0000 (0) 'Stored'\n+070FA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+070FA7 CRC                   00000000 (0)\n+070FAB Compressed Size       00000000 (0)\n+070FAF Uncompressed Size     00000000 (0)\n+070FB3 Filename Length       0058 (88)\n+070FB5 Extra Length          0009 (9)\n+070FB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x70FB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07100F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+071011   Length              0005 (5)\n+071013   Flags               01 (1) 'Modification'\n+071014   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+071018 LOCAL HEADER #213     04034B50 (67324752)\n+07101C Extract Zip Spec      14 (20) '2.0'\n+07101D Extract OS            00 (0) 'MS-DOS'\n+07101E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+071020 Compression Method    0000 (0) 'Stored'\n+071022 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071026 CRC                   00000000 (0)\n+07102A Compressed Size       00000000 (0)\n+07102E Uncompressed Size     00000000 (0)\n+071032 Filename Length       006E (110)\n+071034 Extra Length          0009 (9)\n+071036 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71036: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0710A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0710A6   Length              0005 (5)\n+0710A8   Flags               01 (1) 'Modification'\n+0710A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0710AD PAYLOAD\n+\n+071842 DATA DESCRIPTOR       08074B50 (134695760)\n+071846 CRC                   0B04A112 (184852754)\n+07184A Compressed Size       00000795 (1941)\n+07184E Uncompressed Size     00000795 (1941)\n+\n+071852 LOCAL HEADER #214     04034B50 (67324752)\n+071856 Extract Zip Spec      14 (20) '2.0'\n+071857 Extract OS            00 (0) 'MS-DOS'\n+071858 General Purpose Flag  0000 (0)\n+07185A Compression Method    0000 (0) 'Stored'\n+07185C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071860 CRC                   00000000 (0)\n+071864 Compressed Size       00000000 (0)\n+071868 Uncompressed Size     00000000 (0)\n+07186C Filename Length       0031 (49)\n+07186E Extra Length          0009 (9)\n+071870 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71870: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0718A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0718A3   Length              0005 (5)\n+0718A5   Flags               01 (1) 'Modification'\n+0718A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0718AA LOCAL HEADER #215     04034B50 (67324752)\n+0718AE Extract Zip Spec      14 (20) '2.0'\n+0718AF Extract OS            00 (0) 'MS-DOS'\n+0718B0 General Purpose Flag  0000 (0)\n+0718B2 Compression Method    0000 (0) 'Stored'\n+0718B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0718B8 CRC                   00000000 (0)\n+0718BC Compressed Size       00000000 (0)\n+0718C0 Uncompressed Size     00000000 (0)\n+0718C4 Filename Length       003A (58)\n+0718C6 Extra Length          0009 (9)\n+0718C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x718C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+071902 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+071904   Length              0005 (5)\n+071906   Flags               01 (1) 'Modification'\n+071907   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07190B LOCAL HEADER #216     04034B50 (67324752)\n+07190F Extract Zip Spec      14 (20) '2.0'\n+071910 Extract OS            00 (0) 'MS-DOS'\n+071911 General Purpose Flag  0000 (0)\n+071913 Compression Method    0000 (0) 'Stored'\n+071915 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+071919 CRC                   00000000 (0)\n+07191D Compressed Size       00000000 (0)\n+071921 Uncompressed Size     00000000 (0)\n+071925 Filename Length       006C (108)\n+071927 Extra Length          0009 (9)\n+071929 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x71929: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+071995 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+071997   Length              0005 (5)\n+071999   Flags               01 (1) 'Modification'\n+07199A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07199E LOCAL HEADER #217     04034B50 (67324752)\n+0719A2 Extract Zip Spec      14 (20) '2.0'\n+0719A3 Extract OS            00 (0) 'MS-DOS'\n+0719A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0719A6 Compression Method    0000 (0) 'Stored'\n+0719A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0719AC CRC                   00000000 (0)\n+0719B0 Compressed Size       00000000 (0)\n+0719B4 Uncompressed Size     00000000 (0)\n+0719B8 Filename Length       0082 (130)\n+0719BA Extra Length          0009 (9)\n+0719BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x719BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+071A3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+071A40   Length              0005 (5)\n+071A42   Flags               01 (1) 'Modification'\n+071A43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+071A47 PAYLOAD\n+\n+0722F2 DATA DESCRIPTOR       08074B50 (134695760)\n+0722F6 CRC                   9A51A289 (2589041289)\n+0722FA Compressed Size       000008AB (2219)\n+0722FE Uncompressed Size     000008AB (2219)\n+\n+072302 LOCAL HEADER #218     04034B50 (67324752)\n+072306 Extract Zip Spec      14 (20) '2.0'\n+072307 Extract OS            00 (0) 'MS-DOS'\n+072308 General Purpose Flag  0000 (0)\n+07230A Compression Method    0000 (0) 'Stored'\n+07230C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+072310 CRC                   00000000 (0)\n+072314 Compressed Size       00000000 (0)\n+072318 Uncompressed Size     00000000 (0)\n+07231C Filename Length       0022 (34)\n+07231E Extra Length          0009 (9)\n+072320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x72320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072342 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072344   Length              0005 (5)\n+072346   Flags               01 (1) 'Modification'\n+072347   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07234B LOCAL HEADER #219     04034B50 (67324752)\n+07234F Extract Zip Spec      14 (20) '2.0'\n+072350 Extract OS            00 (0) 'MS-DOS'\n+072351 General Purpose Flag  0000 (0)\n+072353 Compression Method    0000 (0) 'Stored'\n+072355 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+072359 CRC                   00000000 (0)\n+07235D Compressed Size       00000000 (0)\n+072361 Uncompressed Size     00000000 (0)\n+072365 Filename Length       002B (43)\n+072367 Extra Length          0009 (9)\n+072369 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x72369: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072394 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072396   Length              0005 (5)\n+072398   Flags               01 (1) 'Modification'\n+072399   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07239D LOCAL HEADER #220     04034B50 (67324752)\n+0723A1 Extract Zip Spec      14 (20) '2.0'\n+0723A2 Extract OS            00 (0) 'MS-DOS'\n+0723A3 General Purpose Flag  0000 (0)\n+0723A5 Compression Method    0000 (0) 'Stored'\n+0723A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0723AB CRC                   00000000 (0)\n+0723AF Compressed Size       00000000 (0)\n+0723B3 Uncompressed Size     00000000 (0)\n+0723B7 Filename Length       004D (77)\n+0723B9 Extra Length          0009 (9)\n+0723BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x723BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072408 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07240A   Length              0005 (5)\n+07240C   Flags               01 (1) 'Modification'\n+07240D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+072411 LOCAL HEADER #221     04034B50 (67324752)\n+072415 Extract Zip Spec      14 (20) '2.0'\n+072416 Extract OS            00 (0) 'MS-DOS'\n+072417 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+072419 Compression Method    0000 (0) 'Stored'\n+07241B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07241F CRC                   00000000 (0)\n+072423 Compressed Size       00000000 (0)\n+072427 Uncompressed Size     00000000 (0)\n+07242B Filename Length       0063 (99)\n+07242D Extra Length          0009 (9)\n+07242F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7242F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+072492 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+072494   Length              0005 (5)\n+072496   Flags               01 (1) 'Modification'\n+072497   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07249B PAYLOAD\n+\n+075E0A DATA DESCRIPTOR       08074B50 (134695760)\n+075E0E CRC                   BEAE3D9C (3199090076)\n+075E12 Compressed Size       0000396F (14703)\n+075E16 Uncompressed Size     0000396F (14703)\n+\n+075E1A LOCAL HEADER #222     04034B50 (67324752)\n+075E1E Extract Zip Spec      14 (20) '2.0'\n+075E1F Extract OS            00 (0) 'MS-DOS'\n+075E20 General Purpose Flag  0000 (0)\n+075E22 Compression Method    0000 (0) 'Stored'\n+075E24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075E28 CRC                   00000000 (0)\n+075E2C Compressed Size       00000000 (0)\n+075E30 Uncompressed Size     00000000 (0)\n+075E34 Filename Length       0030 (48)\n+075E36 Extra Length          0009 (9)\n+075E38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75E38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+075E68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+075E6A   Length              0005 (5)\n+075E6C   Flags               01 (1) 'Modification'\n+075E6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+075E71 LOCAL HEADER #223     04034B50 (67324752)\n+075E75 Extract Zip Spec      14 (20) '2.0'\n+075E76 Extract OS            00 (0) 'MS-DOS'\n+075E77 General Purpose Flag  0000 (0)\n+075E79 Compression Method    0000 (0) 'Stored'\n+075E7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075E7F CRC                   00000000 (0)\n+075E83 Compressed Size       00000000 (0)\n+075E87 Uncompressed Size     00000000 (0)\n+075E8B Filename Length       0039 (57)\n+075E8D Extra Length          0009 (9)\n+075E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+075EC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+075ECA   Length              0005 (5)\n+075ECC   Flags               01 (1) 'Modification'\n+075ECD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+075ED1 LOCAL HEADER #224     04034B50 (67324752)\n+075ED5 Extract Zip Spec      14 (20) '2.0'\n+075ED6 Extract OS            00 (0) 'MS-DOS'\n+075ED7 General Purpose Flag  0000 (0)\n+075ED9 Compression Method    0000 (0) 'Stored'\n+075EDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075EDF CRC                   00000000 (0)\n+075EE3 Compressed Size       00000000 (0)\n+075EE7 Uncompressed Size     00000000 (0)\n+075EEB Filename Length       006A (106)\n+075EED Extra Length          0009 (9)\n+075EEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75EEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+075F59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+075F5B   Length              0005 (5)\n+075F5D   Flags               01 (1) 'Modification'\n+075F5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+075F62 LOCAL HEADER #225     04034B50 (67324752)\n+075F66 Extract Zip Spec      14 (20) '2.0'\n+075F67 Extract OS            00 (0) 'MS-DOS'\n+075F68 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+075F6A Compression Method    0000 (0) 'Stored'\n+075F6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+075F70 CRC                   00000000 (0)\n+075F74 Compressed Size       00000000 (0)\n+075F78 Uncompressed Size     00000000 (0)\n+075F7C Filename Length       0080 (128)\n+075F7E Extra Length          0009 (9)\n+075F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x75F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+076000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+076002   Length              0005 (5)\n+076004   Flags               01 (1) 'Modification'\n+076005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+076009 PAYLOAD\n+\n+07842A DATA DESCRIPTOR       08074B50 (134695760)\n+07842E CRC                   29D620BA (701898938)\n+078432 Compressed Size       00002421 (9249)\n+078436 Uncompressed Size     00002421 (9249)\n+\n+07843A LOCAL HEADER #226     04034B50 (67324752)\n+07843E Extract Zip Spec      14 (20) '2.0'\n+07843F Extract OS            00 (0) 'MS-DOS'\n+078440 General Purpose Flag  0000 (0)\n+078442 Compression Method    0000 (0) 'Stored'\n+078444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+078448 CRC                   00000000 (0)\n+07844C Compressed Size       00000000 (0)\n+078450 Uncompressed Size     00000000 (0)\n+078454 Filename Length       003C (60)\n+078456 Extra Length          0009 (9)\n+078458 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x78458: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+078494 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+078496   Length              0005 (5)\n+078498   Flags               01 (1) 'Modification'\n+078499   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07849D LOCAL HEADER #227     04034B50 (67324752)\n+0784A1 Extract Zip Spec      14 (20) '2.0'\n+0784A2 Extract OS            00 (0) 'MS-DOS'\n+0784A3 General Purpose Flag  0000 (0)\n+0784A5 Compression Method    0000 (0) 'Stored'\n+0784A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0784AB CRC                   00000000 (0)\n+0784AF Compressed Size       00000000 (0)\n+0784B3 Uncompressed Size     00000000 (0)\n+0784B7 Filename Length       0045 (69)\n+0784B9 Extra Length          0009 (9)\n+0784BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x784BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+078500 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+078502   Length              0005 (5)\n+078504   Flags               01 (1) 'Modification'\n+078505   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+078509 LOCAL HEADER #228     04034B50 (67324752)\n+07850D Extract Zip Spec      14 (20) '2.0'\n+07850E Extract OS            00 (0) 'MS-DOS'\n+07850F General Purpose Flag  0000 (0)\n+078511 Compression Method    0000 (0) 'Stored'\n+078513 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+078517 CRC                   00000000 (0)\n+07851B Compressed Size       00000000 (0)\n+07851F Uncompressed Size     00000000 (0)\n+078523 Filename Length       0063 (99)\n+078525 Extra Length          0009 (9)\n+078527 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x78527: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07858A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07858C   Length              0005 (5)\n+07858E   Flags               01 (1) 'Modification'\n+07858F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+078593 LOCAL HEADER #229     04034B50 (67324752)\n+078597 Extract Zip Spec      14 (20) '2.0'\n+078598 Extract OS            00 (0) 'MS-DOS'\n+078599 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07859B Compression Method    0000 (0) 'Stored'\n+07859D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0785A1 CRC                   00000000 (0)\n+0785A5 Compressed Size       00000000 (0)\n+0785A9 Uncompressed Size     00000000 (0)\n+0785AD Filename Length       0079 (121)\n+0785AF Extra Length          0009 (9)\n+0785B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x785B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07862A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07862C   Length              0005 (5)\n+07862E   Flags               01 (1) 'Modification'\n+07862F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+078633 PAYLOAD\n+\n+07BD1A DATA DESCRIPTOR       08074B50 (134695760)\n+07BD1E CRC                   9ED7BE90 (2664939152)\n+07BD22 Compressed Size       000036E7 (14055)\n+07BD26 Uncompressed Size     000036E7 (14055)\n+\n+07BD2A LOCAL HEADER #230     04034B50 (67324752)\n+07BD2E Extract Zip Spec      14 (20) '2.0'\n+07BD2F Extract OS            00 (0) 'MS-DOS'\n+07BD30 General Purpose Flag  0000 (0)\n+07BD32 Compression Method    0000 (0) 'Stored'\n+07BD34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07BD38 CRC                   00000000 (0)\n+07BD3C Compressed Size       00000000 (0)\n+07BD40 Uncompressed Size     00000000 (0)\n+07BD44 Filename Length       0063 (99)\n+07BD46 Extra Length          0009 (9)\n+07BD48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7BD48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07BDAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07BDAD   Length              0005 (5)\n+07BDAF   Flags               01 (1) 'Modification'\n+07BDB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+07BDB4 LOCAL HEADER #231     04034B50 (67324752)\n+07BDB8 Extract Zip Spec      14 (20) '2.0'\n+07BDB9 Extract OS            00 (0) 'MS-DOS'\n+07BDBA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+07BDBC Compression Method    0000 (0) 'Stored'\n+07BDBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07BDC2 CRC                   00000000 (0)\n+07BDC6 Compressed Size       00000000 (0)\n+07BDCA Uncompressed Size     00000000 (0)\n+07BDCE Filename Length       0079 (121)\n+07BDD0 Extra Length          0009 (9)\n+07BDD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7BDD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07BE4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07BE4D   Length              0005 (5)\n+07BE4F   Flags               01 (1) 'Modification'\n+07BE50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07BE54 PAYLOAD\n+\n+0805E6 DATA DESCRIPTOR       08074B50 (134695760)\n+0805EA CRC                   B51FDD91 (3038764433)\n+0805EE Compressed Size       00004792 (18322)\n+0805F2 Uncompressed Size     00004792 (18322)\n+\n+0805F6 LOCAL HEADER #232     04034B50 (67324752)\n+0805FA Extract Zip Spec      14 (20) '2.0'\n+0805FB Extract OS            00 (0) 'MS-DOS'\n+0805FC General Purpose Flag  0000 (0)\n+0805FE Compression Method    0000 (0) 'Stored'\n+080600 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+080604 CRC                   00000000 (0)\n+080608 Compressed Size       00000000 (0)\n+08060C Uncompressed Size     00000000 (0)\n+080610 Filename Length       0065 (101)\n+080612 Extra Length          0009 (9)\n+080614 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x80614: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+080679 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08067B   Length              0005 (5)\n+08067D   Flags               01 (1) 'Modification'\n+08067E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+080682 LOCAL HEADER #233     04034B50 (67324752)\n+080686 Extract Zip Spec      14 (20) '2.0'\n+080687 Extract OS            00 (0) 'MS-DOS'\n+080688 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08068A Compression Method    0000 (0) 'Stored'\n+08068C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+080690 CRC                   00000000 (0)\n+080694 Compressed Size       00000000 (0)\n+080698 Uncompressed Size     00000000 (0)\n+08069C Filename Length       007B (123)\n+08069E Extra Length          0009 (9)\n+0806A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x806A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08071B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08071D   Length              0005 (5)\n+08071F   Flags               01 (1) 'Modification'\n+080720   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+080724 PAYLOAD\n+\n+086500 DATA DESCRIPTOR       08074B50 (134695760)\n+086504 CRC                   27CFA48B (667919499)\n+086508 Compressed Size       00005DDC (24028)\n+08650C Uncompressed Size     00005DDC (24028)\n+\n+086510 LOCAL HEADER #234     04034B50 (67324752)\n+086514 Extract Zip Spec      14 (20) '2.0'\n+086515 Extract OS            00 (0) 'MS-DOS'\n+086516 General Purpose Flag  0000 (0)\n+086518 Compression Method    0000 (0) 'Stored'\n+08651A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08651E CRC                   00000000 (0)\n+086522 Compressed Size       00000000 (0)\n+086526 Uncompressed Size     00000000 (0)\n+08652A Filename Length       0069 (105)\n+08652C Extra Length          0009 (9)\n+08652E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8652E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+086597 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+086599   Length              0005 (5)\n+08659B   Flags               01 (1) 'Modification'\n+08659C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0865A0 LOCAL HEADER #235     04034B50 (67324752)\n+0865A4 Extract Zip Spec      14 (20) '2.0'\n+0865A5 Extract OS            00 (0) 'MS-DOS'\n+0865A6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0865A8 Compression Method    0000 (0) 'Stored'\n+0865AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0865AE CRC                   00000000 (0)\n+0865B2 Compressed Size       00000000 (0)\n+0865B6 Uncompressed Size     00000000 (0)\n+0865BA Filename Length       007F (127)\n+0865BC Extra Length          0009 (9)\n+0865BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x865BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08663D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08663F   Length              0005 (5)\n+086641   Flags               01 (1) 'Modification'\n+086642   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+086646 PAYLOAD\n+\n+08A180 DATA DESCRIPTOR       08074B50 (134695760)\n+08A184 CRC                   620AB78F (1644869519)\n+08A188 Compressed Size       00003B3A (15162)\n+08A18C Uncompressed Size     00003B3A (15162)\n+\n+08A190 LOCAL HEADER #236     04034B50 (67324752)\n+08A194 Extract Zip Spec      14 (20) '2.0'\n+08A195 Extract OS            00 (0) 'MS-DOS'\n+08A196 General Purpose Flag  0000 (0)\n+08A198 Compression Method    0000 (0) 'Stored'\n+08A19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A19E CRC                   00000000 (0)\n+08A1A2 Compressed Size       00000000 (0)\n+08A1A6 Uncompressed Size     00000000 (0)\n+08A1AA Filename Length       0069 (105)\n+08A1AC Extra Length          0009 (9)\n+08A1AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A1AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A217 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A219   Length              0005 (5)\n+08A21B   Flags               01 (1) 'Modification'\n+08A21C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08A220 LOCAL HEADER #237     04034B50 (67324752)\n+08A224 Extract Zip Spec      14 (20) '2.0'\n+08A225 Extract OS            00 (0) 'MS-DOS'\n+08A226 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08A228 Compression Method    0000 (0) 'Stored'\n+08A22A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08A22E CRC                   00000000 (0)\n+08A232 Compressed Size       00000000 (0)\n+08A236 Uncompressed Size     00000000 (0)\n+08A23A Filename Length       007F (127)\n+08A23C Extra Length          0009 (9)\n+08A23E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8A23E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08A2BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08A2BF   Length              0005 (5)\n+08A2C1   Flags               01 (1) 'Modification'\n+08A2C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08A2C6 PAYLOAD\n+\n+08EB2F DATA DESCRIPTOR       08074B50 (134695760)\n+08EB33 CRC                   937A07E6 (2474248166)\n+08EB37 Compressed Size       00004869 (18537)\n+08EB3B Uncompressed Size     00004869 (18537)\n+\n+08EB3F LOCAL HEADER #238     04034B50 (67324752)\n+08EB43 Extract Zip Spec      14 (20) '2.0'\n+08EB44 Extract OS            00 (0) 'MS-DOS'\n+08EB45 General Purpose Flag  0000 (0)\n+08EB47 Compression Method    0000 (0) 'Stored'\n+08EB49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EB4D CRC                   00000000 (0)\n+08EB51 Compressed Size       00000000 (0)\n+08EB55 Uncompressed Size     00000000 (0)\n+08EB59 Filename Length       006D (109)\n+08EB5B Extra Length          0009 (9)\n+08EB5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EB5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08EBCA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08EBCC   Length              0005 (5)\n+08EBCE   Flags               01 (1) 'Modification'\n+08EBCF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08EBD3 LOCAL HEADER #239     04034B50 (67324752)\n+08EBD7 Extract Zip Spec      14 (20) '2.0'\n+08EBD8 Extract OS            00 (0) 'MS-DOS'\n+08EBD9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08EBDB Compression Method    0000 (0) 'Stored'\n+08EBDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08EBE1 CRC                   00000000 (0)\n+08EBE5 Compressed Size       00000000 (0)\n+08EBE9 Uncompressed Size     00000000 (0)\n+08EBED Filename Length       0083 (131)\n+08EBEF Extra Length          0009 (9)\n+08EBF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8EBF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08EC74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08EC76   Length              0005 (5)\n+08EC78   Flags               01 (1) 'Modification'\n+08EC79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08EC7D PAYLOAD\n+\n+08F75C DATA DESCRIPTOR       08074B50 (134695760)\n+08F760 CRC                   53DFF1D7 (1407185367)\n+08F764 Compressed Size       00000ADF (2783)\n+08F768 Uncompressed Size     00000ADF (2783)\n+\n+08F76C LOCAL HEADER #240     04034B50 (67324752)\n+08F770 Extract Zip Spec      14 (20) '2.0'\n+08F771 Extract OS            00 (0) 'MS-DOS'\n+08F772 General Purpose Flag  0000 (0)\n+08F774 Compression Method    0000 (0) 'Stored'\n+08F776 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F77A CRC                   00000000 (0)\n+08F77E Compressed Size       00000000 (0)\n+08F782 Uncompressed Size     00000000 (0)\n+08F786 Filename Length       0069 (105)\n+08F788 Extra Length          0009 (9)\n+08F78A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F78A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F7F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F7F5   Length              0005 (5)\n+08F7F7   Flags               01 (1) 'Modification'\n+08F7F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08F7FC LOCAL HEADER #241     04034B50 (67324752)\n+08F800 Extract Zip Spec      14 (20) '2.0'\n+08F801 Extract OS            00 (0) 'MS-DOS'\n+08F802 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+08F804 Compression Method    0000 (0) 'Stored'\n+08F806 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08F80A CRC                   00000000 (0)\n+08F80E Compressed Size       00000000 (0)\n+08F812 Uncompressed Size     00000000 (0)\n+08F816 Filename Length       007F (127)\n+08F818 Extra Length          0009 (9)\n+08F81A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F81A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08F899 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08F89B   Length              0005 (5)\n+08F89D   Flags               01 (1) 'Modification'\n+08F89E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08F8A2 PAYLOAD\n+\n+0901DB DATA DESCRIPTOR       08074B50 (134695760)\n+0901DF CRC                   6D3A5445 (1832539205)\n+0901E3 Compressed Size       00000939 (2361)\n+0901E7 Uncompressed Size     00000939 (2361)\n+\n+0901EB LOCAL HEADER #242     04034B50 (67324752)\n+0901EF Extract Zip Spec      14 (20) '2.0'\n+0901F0 Extract OS            00 (0) 'MS-DOS'\n+0901F1 General Purpose Flag  0000 (0)\n+0901F3 Compression Method    0000 (0) 'Stored'\n+0901F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0901F9 CRC                   00000000 (0)\n+0901FD Compressed Size       00000000 (0)\n+090201 Uncompressed Size     00000000 (0)\n+090205 Filename Length       0078 (120)\n+090207 Extra Length          0009 (9)\n+090209 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x90209: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+090281 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090283   Length              0005 (5)\n+090285   Flags               01 (1) 'Modification'\n+090286   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09028A LOCAL HEADER #243     04034B50 (67324752)\n+09028E Extract Zip Spec      14 (20) '2.0'\n+09028F Extract OS            00 (0) 'MS-DOS'\n+090290 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+090292 Compression Method    0000 (0) 'Stored'\n+090294 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+090298 CRC                   00000000 (0)\n+09029C Compressed Size       00000000 (0)\n+0902A0 Uncompressed Size     00000000 (0)\n+0902A4 Filename Length       008E (142)\n+0902A6 Extra Length          0009 (9)\n+0902A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x90311: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x902A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09039F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0903A1   Length              0005 (5)\n-0903A3   Flags               01 (1) 'Modification'\n-0903A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0903A8 PAYLOAD\n-\n-091185 DATA DESCRIPTOR       08074B50 (134695760)\n-091189 CRC                   5C6B1924 (1550522660)\n-09118D Compressed Size       00000DDD (3549)\n-091191 Uncompressed Size     00000DDD (3549)\n-\n-091195 LOCAL HEADER #244     04034B50 (67324752)\n-091199 Extract Zip Spec      14 (20) '2.0'\n-09119A Extract OS            00 (0) 'MS-DOS'\n-09119B General Purpose Flag  0000 (0)\n-09119D Compression Method    0000 (0) 'Stored'\n-09119F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0911A3 CRC                   00000000 (0)\n-0911A7 Compressed Size       00000000 (0)\n-0911AB Uncompressed Size     00000000 (0)\n-0911AF Filename Length       0063 (99)\n-0911B1 Extra Length          0009 (9)\n-0911B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x911B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091218   Length              0005 (5)\n-09121A   Flags               01 (1) 'Modification'\n-09121B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09121F LOCAL HEADER #245     04034B50 (67324752)\n-091223 Extract Zip Spec      14 (20) '2.0'\n-091224 Extract OS            00 (0) 'MS-DOS'\n-091225 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-091227 Compression Method    0000 (0) 'Stored'\n-091229 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09122D CRC                   00000000 (0)\n-091231 Compressed Size       00000000 (0)\n-091235 Uncompressed Size     00000000 (0)\n-091239 Filename Length       0079 (121)\n-09123B Extra Length          0009 (9)\n-09123D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9123D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0912B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0912B8   Length              0005 (5)\n-0912BA   Flags               01 (1) 'Modification'\n-0912BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0912BF PAYLOAD\n-\n-09A5F4 DATA DESCRIPTOR       08074B50 (134695760)\n-09A5F8 CRC                   C7DF88BB (3353315515)\n-09A5FC Compressed Size       00009335 (37685)\n-09A600 Uncompressed Size     00009335 (37685)\n-\n-09A604 LOCAL HEADER #246     04034B50 (67324752)\n-09A608 Extract Zip Spec      14 (20) '2.0'\n-09A609 Extract OS            00 (0) 'MS-DOS'\n-09A60A General Purpose Flag  0000 (0)\n-09A60C Compression Method    0000 (0) 'Stored'\n-09A60E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09A612 CRC                   00000000 (0)\n-09A616 Compressed Size       00000000 (0)\n-09A61A Uncompressed Size     00000000 (0)\n-09A61E Filename Length       006C (108)\n-09A620 Extra Length          0009 (9)\n-09A622 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9A622: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09A68E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09A690   Length              0005 (5)\n-09A692   Flags               01 (1) 'Modification'\n-09A693   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09A697 LOCAL HEADER #247     04034B50 (67324752)\n-09A69B Extract Zip Spec      14 (20) '2.0'\n-09A69C Extract OS            00 (0) 'MS-DOS'\n-09A69D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09A69F Compression Method    0000 (0) 'Stored'\n-09A6A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09A6A5 CRC                   00000000 (0)\n-09A6A9 Compressed Size       00000000 (0)\n-09A6AD Uncompressed Size     00000000 (0)\n-09A6B1 Filename Length       0082 (130)\n-09A6B3 Extra Length          0009 (9)\n-09A6B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9A6B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09A737 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09A739   Length              0005 (5)\n-09A73B   Flags               01 (1) 'Modification'\n-09A73C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09A740 PAYLOAD\n-\n-09C2F1 DATA DESCRIPTOR       08074B50 (134695760)\n-09C2F5 CRC                   217BBE0B (561757707)\n-09C2F9 Compressed Size       00001BB1 (7089)\n-09C2FD Uncompressed Size     00001BB1 (7089)\n-\n-09C301 LOCAL HEADER #248     04034B50 (67324752)\n-09C305 Extract Zip Spec      14 (20) '2.0'\n-09C306 Extract OS            00 (0) 'MS-DOS'\n-09C307 General Purpose Flag  0000 (0)\n-09C309 Compression Method    0000 (0) 'Stored'\n-09C30B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C30F CRC                   00000000 (0)\n-09C313 Compressed Size       00000000 (0)\n-09C317 Uncompressed Size     00000000 (0)\n-09C31B Filename Length       0069 (105)\n-09C31D Extra Length          0009 (9)\n-09C31F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9C31F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09C388 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C38A   Length              0005 (5)\n-09C38C   Flags               01 (1) 'Modification'\n-09C38D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-09C391 LOCAL HEADER #249     04034B50 (67324752)\n-09C395 Extract Zip Spec      14 (20) '2.0'\n-09C396 Extract OS            00 (0) 'MS-DOS'\n-09C397 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-09C399 Compression Method    0000 (0) 'Stored'\n-09C39B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C39F CRC                   00000000 (0)\n-09C3A3 Compressed Size       00000000 (0)\n-09C3A7 Uncompressed Size     00000000 (0)\n-09C3AB Filename Length       007F (127)\n-09C3AD Extra Length          0009 (9)\n-09C3AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9C3AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09C42E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09C430   Length              0005 (5)\n-09C432   Flags               01 (1) 'Modification'\n-09C433   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09C437 PAYLOAD\n-\n-0A0EA1 DATA DESCRIPTOR       08074B50 (134695760)\n-0A0EA5 CRC                   CF72F6D0 (3480418000)\n-0A0EA9 Compressed Size       00004A6A (19050)\n-0A0EAD Uncompressed Size     00004A6A (19050)\n-\n-0A0EB1 LOCAL HEADER #250     04034B50 (67324752)\n-0A0EB5 Extract Zip Spec      14 (20) '2.0'\n-0A0EB6 Extract OS            00 (0) 'MS-DOS'\n-0A0EB7 General Purpose Flag  0000 (0)\n-0A0EB9 Compression Method    0000 (0) 'Stored'\n-0A0EBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0EBF CRC                   00000000 (0)\n-0A0EC3 Compressed Size       00000000 (0)\n-0A0EC7 Uncompressed Size     00000000 (0)\n-0A0ECB Filename Length       0029 (41)\n-0A0ECD Extra Length          0009 (9)\n-0A0ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0EF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0EFA   Length              0005 (5)\n-0A0EFC   Flags               01 (1) 'Modification'\n-0A0EFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A0F01 LOCAL HEADER #251     04034B50 (67324752)\n-0A0F05 Extract Zip Spec      14 (20) '2.0'\n-0A0F06 Extract OS            00 (0) 'MS-DOS'\n-0A0F07 General Purpose Flag  0000 (0)\n-0A0F09 Compression Method    0000 (0) 'Stored'\n-0A0F0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0F0F CRC                   00000000 (0)\n-0A0F13 Compressed Size       00000000 (0)\n-0A0F17 Uncompressed Size     00000000 (0)\n-0A0F1B Filename Length       0032 (50)\n-0A0F1D Extra Length          0009 (9)\n-0A0F1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0F1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0F51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0F53   Length              0005 (5)\n-0A0F55   Flags               01 (1) 'Modification'\n-0A0F56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A0F5A LOCAL HEADER #252     04034B50 (67324752)\n-0A0F5E Extract Zip Spec      14 (20) '2.0'\n-0A0F5F Extract OS            00 (0) 'MS-DOS'\n-0A0F60 General Purpose Flag  0000 (0)\n-0A0F62 Compression Method    0000 (0) 'Stored'\n-0A0F64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0F68 CRC                   00000000 (0)\n-0A0F6C Compressed Size       00000000 (0)\n-0A0F70 Uncompressed Size     00000000 (0)\n-0A0F74 Filename Length       006C (108)\n-0A0F76 Extra Length          0009 (9)\n-0A0F78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA0F78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A0FE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A0FE6   Length              0005 (5)\n-0A0FE8   Flags               01 (1) 'Modification'\n-0A0FE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A0FED LOCAL HEADER #253     04034B50 (67324752)\n-0A0FF1 Extract Zip Spec      14 (20) '2.0'\n-0A0FF2 Extract OS            00 (0) 'MS-DOS'\n-0A0FF3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A0FF5 Compression Method    0000 (0) 'Stored'\n-0A0FF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A0FFB CRC                   00000000 (0)\n-0A0FFF Compressed Size       00000000 (0)\n-0A1003 Uncompressed Size     00000000 (0)\n-0A1007 Filename Length       0082 (130)\n-0A1009 Extra Length          0009 (9)\n-0A100B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA100B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A108D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A108F   Length              0005 (5)\n-0A1091   Flags               01 (1) 'Modification'\n-0A1092   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A1096 PAYLOAD\n-\n-0A1A69 DATA DESCRIPTOR       08074B50 (134695760)\n-0A1A6D CRC                   DCEFA272 (3706692210)\n-0A1A71 Compressed Size       000009D3 (2515)\n-0A1A75 Uncompressed Size     000009D3 (2515)\n-\n-0A1A79 LOCAL HEADER #254     04034B50 (67324752)\n-0A1A7D Extract Zip Spec      14 (20) '2.0'\n-0A1A7E Extract OS            00 (0) 'MS-DOS'\n-0A1A7F General Purpose Flag  0000 (0)\n-0A1A81 Compression Method    0000 (0) 'Stored'\n-0A1A83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A1A87 CRC                   00000000 (0)\n-0A1A8B Compressed Size       00000000 (0)\n-0A1A8F Uncompressed Size     00000000 (0)\n-0A1A93 Filename Length       006E (110)\n-0A1A95 Extra Length          0009 (9)\n-0A1A97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA1A97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A1B05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A1B07   Length              0005 (5)\n-0A1B09   Flags               01 (1) 'Modification'\n-0A1B0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A1B0E LOCAL HEADER #255     04034B50 (67324752)\n-0A1B12 Extract Zip Spec      14 (20) '2.0'\n-0A1B13 Extract OS            00 (0) 'MS-DOS'\n-0A1B14 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A1B16 Compression Method    0000 (0) 'Stored'\n-0A1B18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A1B1C CRC                   00000000 (0)\n-0A1B20 Compressed Size       00000000 (0)\n-0A1B24 Uncompressed Size     00000000 (0)\n-0A1B28 Filename Length       0084 (132)\n-0A1B2A Extra Length          0009 (9)\n-0A1B2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+090336 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+090338   Length              0005 (5)\n+09033A   Flags               01 (1) 'Modification'\n+09033B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09033F PAYLOAD\n+\n+09111C DATA DESCRIPTOR       08074B50 (134695760)\n+091120 CRC                   5C6B1924 (1550522660)\n+091124 Compressed Size       00000DDD (3549)\n+091128 Uncompressed Size     00000DDD (3549)\n+\n+09112C LOCAL HEADER #244     04034B50 (67324752)\n+091130 Extract Zip Spec      14 (20) '2.0'\n+091131 Extract OS            00 (0) 'MS-DOS'\n+091132 General Purpose Flag  0000 (0)\n+091134 Compression Method    0000 (0) 'Stored'\n+091136 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09113A CRC                   00000000 (0)\n+09113E Compressed Size       00000000 (0)\n+091142 Uncompressed Size     00000000 (0)\n+091146 Filename Length       0063 (99)\n+091148 Extra Length          0009 (9)\n+09114A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9114A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0911AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0911AF   Length              0005 (5)\n+0911B1   Flags               01 (1) 'Modification'\n+0911B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0911B6 LOCAL HEADER #245     04034B50 (67324752)\n+0911BA Extract Zip Spec      14 (20) '2.0'\n+0911BB Extract OS            00 (0) 'MS-DOS'\n+0911BC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0911BE Compression Method    0000 (0) 'Stored'\n+0911C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0911C4 CRC                   00000000 (0)\n+0911C8 Compressed Size       00000000 (0)\n+0911CC Uncompressed Size     00000000 (0)\n+0911D0 Filename Length       0079 (121)\n+0911D2 Extra Length          0009 (9)\n+0911D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x911D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09124D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09124F   Length              0005 (5)\n+091251   Flags               01 (1) 'Modification'\n+091252   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+091256 PAYLOAD\n+\n+09A58B DATA DESCRIPTOR       08074B50 (134695760)\n+09A58F CRC                   C7DF88BB (3353315515)\n+09A593 Compressed Size       00009335 (37685)\n+09A597 Uncompressed Size     00009335 (37685)\n+\n+09A59B LOCAL HEADER #246     04034B50 (67324752)\n+09A59F Extract Zip Spec      14 (20) '2.0'\n+09A5A0 Extract OS            00 (0) 'MS-DOS'\n+09A5A1 General Purpose Flag  0000 (0)\n+09A5A3 Compression Method    0000 (0) 'Stored'\n+09A5A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09A5A9 CRC                   00000000 (0)\n+09A5AD Compressed Size       00000000 (0)\n+09A5B1 Uncompressed Size     00000000 (0)\n+09A5B5 Filename Length       006C (108)\n+09A5B7 Extra Length          0009 (9)\n+09A5B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9A5B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09A625 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09A627   Length              0005 (5)\n+09A629   Flags               01 (1) 'Modification'\n+09A62A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09A62E LOCAL HEADER #247     04034B50 (67324752)\n+09A632 Extract Zip Spec      14 (20) '2.0'\n+09A633 Extract OS            00 (0) 'MS-DOS'\n+09A634 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09A636 Compression Method    0000 (0) 'Stored'\n+09A638 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09A63C CRC                   00000000 (0)\n+09A640 Compressed Size       00000000 (0)\n+09A644 Uncompressed Size     00000000 (0)\n+09A648 Filename Length       0082 (130)\n+09A64A Extra Length          0009 (9)\n+09A64C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9A64C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09A6CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09A6D0   Length              0005 (5)\n+09A6D2   Flags               01 (1) 'Modification'\n+09A6D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09A6D7 PAYLOAD\n+\n+09C288 DATA DESCRIPTOR       08074B50 (134695760)\n+09C28C CRC                   217BBE0B (561757707)\n+09C290 Compressed Size       00001BB1 (7089)\n+09C294 Uncompressed Size     00001BB1 (7089)\n+\n+09C298 LOCAL HEADER #248     04034B50 (67324752)\n+09C29C Extract Zip Spec      14 (20) '2.0'\n+09C29D Extract OS            00 (0) 'MS-DOS'\n+09C29E General Purpose Flag  0000 (0)\n+09C2A0 Compression Method    0000 (0) 'Stored'\n+09C2A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C2A6 CRC                   00000000 (0)\n+09C2AA Compressed Size       00000000 (0)\n+09C2AE Uncompressed Size     00000000 (0)\n+09C2B2 Filename Length       0069 (105)\n+09C2B4 Extra Length          0009 (9)\n+09C2B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C2B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C31F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C321   Length              0005 (5)\n+09C323   Flags               01 (1) 'Modification'\n+09C324   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+09C328 LOCAL HEADER #249     04034B50 (67324752)\n+09C32C Extract Zip Spec      14 (20) '2.0'\n+09C32D Extract OS            00 (0) 'MS-DOS'\n+09C32E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+09C330 Compression Method    0000 (0) 'Stored'\n+09C332 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09C336 CRC                   00000000 (0)\n+09C33A Compressed Size       00000000 (0)\n+09C33E Uncompressed Size     00000000 (0)\n+09C342 Filename Length       007F (127)\n+09C344 Extra Length          0009 (9)\n+09C346 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9C346: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09C3C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09C3C7   Length              0005 (5)\n+09C3C9   Flags               01 (1) 'Modification'\n+09C3CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09C3CE PAYLOAD\n+\n+0A0E38 DATA DESCRIPTOR       08074B50 (134695760)\n+0A0E3C CRC                   CF72F6D0 (3480418000)\n+0A0E40 Compressed Size       00004A6A (19050)\n+0A0E44 Uncompressed Size     00004A6A (19050)\n+\n+0A0E48 LOCAL HEADER #250     04034B50 (67324752)\n+0A0E4C Extract Zip Spec      14 (20) '2.0'\n+0A0E4D Extract OS            00 (0) 'MS-DOS'\n+0A0E4E General Purpose Flag  0000 (0)\n+0A0E50 Compression Method    0000 (0) 'Stored'\n+0A0E52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A0E56 CRC                   00000000 (0)\n+0A0E5A Compressed Size       00000000 (0)\n+0A0E5E Uncompressed Size     00000000 (0)\n+0A0E62 Filename Length       0029 (41)\n+0A0E64 Extra Length          0009 (9)\n+0A0E66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA0E66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A0E8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A0E91   Length              0005 (5)\n+0A0E93   Flags               01 (1) 'Modification'\n+0A0E94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A0E98 LOCAL HEADER #251     04034B50 (67324752)\n+0A0E9C Extract Zip Spec      14 (20) '2.0'\n+0A0E9D Extract OS            00 (0) 'MS-DOS'\n+0A0E9E General Purpose Flag  0000 (0)\n+0A0EA0 Compression Method    0000 (0) 'Stored'\n+0A0EA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A0EA6 CRC                   00000000 (0)\n+0A0EAA Compressed Size       00000000 (0)\n+0A0EAE Uncompressed Size     00000000 (0)\n+0A0EB2 Filename Length       0032 (50)\n+0A0EB4 Extra Length          0009 (9)\n+0A0EB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA0EB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A0EE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A0EEA   Length              0005 (5)\n+0A0EEC   Flags               01 (1) 'Modification'\n+0A0EED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A0EF1 LOCAL HEADER #252     04034B50 (67324752)\n+0A0EF5 Extract Zip Spec      14 (20) '2.0'\n+0A0EF6 Extract OS            00 (0) 'MS-DOS'\n+0A0EF7 General Purpose Flag  0000 (0)\n+0A0EF9 Compression Method    0000 (0) 'Stored'\n+0A0EFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A0EFF CRC                   00000000 (0)\n+0A0F03 Compressed Size       00000000 (0)\n+0A0F07 Uncompressed Size     00000000 (0)\n+0A0F0B Filename Length       006C (108)\n+0A0F0D Extra Length          0009 (9)\n+0A0F0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA0F0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A0F7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A0F7D   Length              0005 (5)\n+0A0F7F   Flags               01 (1) 'Modification'\n+0A0F80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A0F84 LOCAL HEADER #253     04034B50 (67324752)\n+0A0F88 Extract Zip Spec      14 (20) '2.0'\n+0A0F89 Extract OS            00 (0) 'MS-DOS'\n+0A0F8A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A0F8C Compression Method    0000 (0) 'Stored'\n+0A0F8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A0F92 CRC                   00000000 (0)\n+0A0F96 Compressed Size       00000000 (0)\n+0A0F9A Uncompressed Size     00000000 (0)\n+0A0F9E Filename Length       0082 (130)\n+0A0FA0 Extra Length          0009 (9)\n+0A0FA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA0FA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A1024 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A1026   Length              0005 (5)\n+0A1028   Flags               01 (1) 'Modification'\n+0A1029   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A102D PAYLOAD\n+\n+0A1A00 DATA DESCRIPTOR       08074B50 (134695760)\n+0A1A04 CRC                   DCEFA272 (3706692210)\n+0A1A08 Compressed Size       000009D3 (2515)\n+0A1A0C Uncompressed Size     000009D3 (2515)\n+\n+0A1A10 LOCAL HEADER #254     04034B50 (67324752)\n+0A1A14 Extract Zip Spec      14 (20) '2.0'\n+0A1A15 Extract OS            00 (0) 'MS-DOS'\n+0A1A16 General Purpose Flag  0000 (0)\n+0A1A18 Compression Method    0000 (0) 'Stored'\n+0A1A1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A1A1E CRC                   00000000 (0)\n+0A1A22 Compressed Size       00000000 (0)\n+0A1A26 Uncompressed Size     00000000 (0)\n+0A1A2A Filename Length       006E (110)\n+0A1A2C Extra Length          0009 (9)\n+0A1A2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA1A2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A1A9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A1A9E   Length              0005 (5)\n+0A1AA0   Flags               01 (1) 'Modification'\n+0A1AA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A1AA5 LOCAL HEADER #255     04034B50 (67324752)\n+0A1AA9 Extract Zip Spec      14 (20) '2.0'\n+0A1AAA Extract OS            00 (0) 'MS-DOS'\n+0A1AAB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A1AAD Compression Method    0000 (0) 'Stored'\n+0A1AAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A1AB3 CRC                   00000000 (0)\n+0A1AB7 Compressed Size       00000000 (0)\n+0A1ABB Uncompressed Size     00000000 (0)\n+0A1ABF Filename Length       0084 (132)\n+0A1AC1 Extra Length          0009 (9)\n+0A1AC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0xA1B2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA1AC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A1BB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A1BB2   Length              0005 (5)\n-0A1BB4   Flags               01 (1) 'Modification'\n-0A1BB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A1BB9 PAYLOAD\n-\n-0A2E2F DATA DESCRIPTOR       08074B50 (134695760)\n-0A2E33 CRC                   26E963FE (652829694)\n-0A2E37 Compressed Size       00001276 (4726)\n-0A2E3B Uncompressed Size     00001276 (4726)\n-\n-0A2E3F LOCAL HEADER #256     04034B50 (67324752)\n-0A2E43 Extract Zip Spec      14 (20) '2.0'\n-0A2E44 Extract OS            00 (0) 'MS-DOS'\n-0A2E45 General Purpose Flag  0000 (0)\n-0A2E47 Compression Method    0000 (0) 'Stored'\n-0A2E49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A2E4D CRC                   00000000 (0)\n-0A2E51 Compressed Size       00000000 (0)\n-0A2E55 Uncompressed Size     00000000 (0)\n-0A2E59 Filename Length       0028 (40)\n-0A2E5B Extra Length          0009 (9)\n-0A2E5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA2E5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A2E85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A2E87   Length              0005 (5)\n-0A2E89   Flags               01 (1) 'Modification'\n-0A2E8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A2E8E LOCAL HEADER #257     04034B50 (67324752)\n-0A2E92 Extract Zip Spec      14 (20) '2.0'\n-0A2E93 Extract OS            00 (0) 'MS-DOS'\n-0A2E94 General Purpose Flag  0000 (0)\n-0A2E96 Compression Method    0000 (0) 'Stored'\n-0A2E98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A2E9C CRC                   00000000 (0)\n-0A2EA0 Compressed Size       00000000 (0)\n-0A2EA4 Uncompressed Size     00000000 (0)\n-0A2EA8 Filename Length       0031 (49)\n-0A2EAA Extra Length          0009 (9)\n-0A2EAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA2EAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A2EDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A2EDF   Length              0005 (5)\n-0A2EE1   Flags               01 (1) 'Modification'\n-0A2EE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A2EE6 LOCAL HEADER #258     04034B50 (67324752)\n-0A2EEA Extract Zip Spec      14 (20) '2.0'\n-0A2EEB Extract OS            00 (0) 'MS-DOS'\n-0A2EEC General Purpose Flag  0000 (0)\n-0A2EEE Compression Method    0000 (0) 'Stored'\n-0A2EF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A2EF4 CRC                   00000000 (0)\n-0A2EF8 Compressed Size       00000000 (0)\n-0A2EFC Uncompressed Size     00000000 (0)\n-0A2F00 Filename Length       0061 (97)\n-0A2F02 Extra Length          0009 (9)\n-0A2F04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA2F04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A2F65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A2F67   Length              0005 (5)\n-0A2F69   Flags               01 (1) 'Modification'\n-0A2F6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A2F6E LOCAL HEADER #259     04034B50 (67324752)\n-0A2F72 Extract Zip Spec      14 (20) '2.0'\n-0A2F73 Extract OS            00 (0) 'MS-DOS'\n-0A2F74 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A2F76 Compression Method    0000 (0) 'Stored'\n-0A2F78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A2F7C CRC                   00000000 (0)\n-0A2F80 Compressed Size       00000000 (0)\n-0A2F84 Uncompressed Size     00000000 (0)\n-0A2F88 Filename Length       0077 (119)\n-0A2F8A Extra Length          0009 (9)\n-0A2F8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA2F8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A3003 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A3005   Length              0005 (5)\n-0A3007   Flags               01 (1) 'Modification'\n-0A3008   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A300C PAYLOAD\n-\n-0A84D0 DATA DESCRIPTOR       08074B50 (134695760)\n-0A84D4 CRC                   9B32EF54 (2603806548)\n-0A84D8 Compressed Size       000054C4 (21700)\n-0A84DC Uncompressed Size     000054C4 (21700)\n-\n-0A84E0 LOCAL HEADER #260     04034B50 (67324752)\n-0A84E4 Extract Zip Spec      14 (20) '2.0'\n-0A84E5 Extract OS            00 (0) 'MS-DOS'\n-0A84E6 General Purpose Flag  0000 (0)\n-0A84E8 Compression Method    0000 (0) 'Stored'\n-0A84EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A84EE CRC                   00000000 (0)\n-0A84F2 Compressed Size       00000000 (0)\n-0A84F6 Uncompressed Size     00000000 (0)\n-0A84FA Filename Length       0068 (104)\n-0A84FC Extra Length          0009 (9)\n-0A84FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA84FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A8566 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A8568   Length              0005 (5)\n-0A856A   Flags               01 (1) 'Modification'\n-0A856B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0A856F LOCAL HEADER #261     04034B50 (67324752)\n-0A8573 Extract Zip Spec      14 (20) '2.0'\n-0A8574 Extract OS            00 (0) 'MS-DOS'\n-0A8575 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0A8577 Compression Method    0000 (0) 'Stored'\n-0A8579 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A857D CRC                   00000000 (0)\n-0A8581 Compressed Size       00000000 (0)\n-0A8585 Uncompressed Size     00000000 (0)\n-0A8589 Filename Length       007E (126)\n-0A858B Extra Length          0009 (9)\n-0A858D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA858D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A860B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A860D   Length              0005 (5)\n-0A860F   Flags               01 (1) 'Modification'\n-0A8610   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A8614 PAYLOAD\n-\n-0AA135 DATA DESCRIPTOR       08074B50 (134695760)\n-0AA139 CRC                   4975042F (1232405551)\n-0AA13D Compressed Size       00001B21 (6945)\n-0AA141 Uncompressed Size     00001B21 (6945)\n-\n-0AA145 LOCAL HEADER #262     04034B50 (67324752)\n-0AA149 Extract Zip Spec      14 (20) '2.0'\n-0AA14A Extract OS            00 (0) 'MS-DOS'\n-0AA14B General Purpose Flag  0000 (0)\n-0AA14D Compression Method    0000 (0) 'Stored'\n-0AA14F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AA153 CRC                   00000000 (0)\n-0AA157 Compressed Size       00000000 (0)\n-0AA15B Uncompressed Size     00000000 (0)\n-0AA15F Filename Length       006B (107)\n-0AA161 Extra Length          0009 (9)\n-0AA163 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAA163: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AA1CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AA1D0   Length              0005 (5)\n-0AA1D2   Flags               01 (1) 'Modification'\n-0AA1D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AA1D7 LOCAL HEADER #263     04034B50 (67324752)\n-0AA1DB Extract Zip Spec      14 (20) '2.0'\n-0AA1DC Extract OS            00 (0) 'MS-DOS'\n-0AA1DD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AA1DF Compression Method    0000 (0) 'Stored'\n-0AA1E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AA1E5 CRC                   00000000 (0)\n-0AA1E9 Compressed Size       00000000 (0)\n-0AA1ED Uncompressed Size     00000000 (0)\n-0AA1F1 Filename Length       0081 (129)\n-0AA1F3 Extra Length          0009 (9)\n-0AA1F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAA1F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AA276 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AA278   Length              0005 (5)\n-0AA27A   Flags               01 (1) 'Modification'\n-0AA27B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AA27F PAYLOAD\n-\n-0AB769 DATA DESCRIPTOR       08074B50 (134695760)\n-0AB76D CRC                   27E12F4C (669069132)\n-0AB771 Compressed Size       000014EA (5354)\n-0AB775 Uncompressed Size     000014EA (5354)\n-\n-0AB779 LOCAL HEADER #264     04034B50 (67324752)\n-0AB77D Extract Zip Spec      14 (20) '2.0'\n-0AB77E Extract OS            00 (0) 'MS-DOS'\n-0AB77F General Purpose Flag  0000 (0)\n-0AB781 Compression Method    0000 (0) 'Stored'\n-0AB783 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AB787 CRC                   00000000 (0)\n-0AB78B Compressed Size       00000000 (0)\n-0AB78F Uncompressed Size     00000000 (0)\n-0AB793 Filename Length       006B (107)\n-0AB795 Extra Length          0009 (9)\n-0AB797 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAB797: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AB802 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AB804   Length              0005 (5)\n-0AB806   Flags               01 (1) 'Modification'\n-0AB807   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AB80B LOCAL HEADER #265     04034B50 (67324752)\n-0AB80F Extract Zip Spec      14 (20) '2.0'\n-0AB810 Extract OS            00 (0) 'MS-DOS'\n-0AB811 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AB813 Compression Method    0000 (0) 'Stored'\n-0AB815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AB819 CRC                   00000000 (0)\n-0AB81D Compressed Size       00000000 (0)\n-0AB821 Uncompressed Size     00000000 (0)\n-0AB825 Filename Length       0081 (129)\n-0AB827 Extra Length          0009 (9)\n-0AB829 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAB829: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AB8AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AB8AC   Length              0005 (5)\n-0AB8AE   Flags               01 (1) 'Modification'\n-0AB8AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AB8B3 PAYLOAD\n-\n-0AEF93 DATA DESCRIPTOR       08074B50 (134695760)\n-0AEF97 CRC                   3E8950DE (1049186526)\n-0AEF9B Compressed Size       000036E0 (14048)\n-0AEF9F Uncompressed Size     000036E0 (14048)\n-\n-0AEFA3 LOCAL HEADER #266     04034B50 (67324752)\n-0AEFA7 Extract Zip Spec      14 (20) '2.0'\n-0AEFA8 Extract OS            00 (0) 'MS-DOS'\n-0AEFA9 General Purpose Flag  0000 (0)\n-0AEFAB Compression Method    0000 (0) 'Stored'\n-0AEFAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AEFB1 CRC                   00000000 (0)\n-0AEFB5 Compressed Size       00000000 (0)\n-0AEFB9 Uncompressed Size     00000000 (0)\n-0AEFBD Filename Length       006A (106)\n-0AEFBF Extra Length          0009 (9)\n-0AEFC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAEFC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AF02B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF02D   Length              0005 (5)\n-0AF02F   Flags               01 (1) 'Modification'\n-0AF030   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0AF034 LOCAL HEADER #267     04034B50 (67324752)\n-0AF038 Extract Zip Spec      14 (20) '2.0'\n-0AF039 Extract OS            00 (0) 'MS-DOS'\n-0AF03A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0AF03C Compression Method    0000 (0) 'Stored'\n-0AF03E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AF042 CRC                   00000000 (0)\n-0AF046 Compressed Size       00000000 (0)\n-0AF04A Uncompressed Size     00000000 (0)\n-0AF04E Filename Length       0080 (128)\n-0AF050 Extra Length          0009 (9)\n-0AF052 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAF052: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0AF0D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0AF0D4   Length              0005 (5)\n-0AF0D6   Flags               01 (1) 'Modification'\n-0AF0D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0AF0DB PAYLOAD\n-\n-0B112C DATA DESCRIPTOR       08074B50 (134695760)\n-0B1130 CRC                   A9B3A4D7 (2847122647)\n-0B1134 Compressed Size       00002051 (8273)\n-0B1138 Uncompressed Size     00002051 (8273)\n-\n-0B113C LOCAL HEADER #268     04034B50 (67324752)\n-0B1140 Extract Zip Spec      14 (20) '2.0'\n-0B1141 Extract OS            00 (0) 'MS-DOS'\n-0B1142 General Purpose Flag  0000 (0)\n-0B1144 Compression Method    0000 (0) 'Stored'\n-0B1146 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B114A CRC                   00000000 (0)\n-0B114E Compressed Size       00000000 (0)\n-0B1152 Uncompressed Size     00000000 (0)\n-0B1156 Filename Length       0026 (38)\n-0B1158 Extra Length          0009 (9)\n-0B115A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB115A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1180 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1182   Length              0005 (5)\n-0B1184   Flags               01 (1) 'Modification'\n-0B1185   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1189 LOCAL HEADER #269     04034B50 (67324752)\n-0B118D Extract Zip Spec      14 (20) '2.0'\n-0B118E Extract OS            00 (0) 'MS-DOS'\n-0B118F General Purpose Flag  0000 (0)\n-0B1191 Compression Method    0000 (0) 'Stored'\n-0B1193 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1197 CRC                   00000000 (0)\n-0B119B Compressed Size       00000000 (0)\n-0B119F Uncompressed Size     00000000 (0)\n-0B11A3 Filename Length       002F (47)\n-0B11A5 Extra Length          0009 (9)\n-0B11A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB11A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B11D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B11D8   Length              0005 (5)\n-0B11DA   Flags               01 (1) 'Modification'\n-0B11DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B11DF LOCAL HEADER #270     04034B50 (67324752)\n-0B11E3 Extract Zip Spec      14 (20) '2.0'\n-0B11E4 Extract OS            00 (0) 'MS-DOS'\n-0B11E5 General Purpose Flag  0000 (0)\n-0B11E7 Compression Method    0000 (0) 'Stored'\n-0B11E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B11ED CRC                   00000000 (0)\n-0B11F1 Compressed Size       00000000 (0)\n-0B11F5 Uncompressed Size     00000000 (0)\n-0B11F9 Filename Length       005D (93)\n-0B11FB Extra Length          0009 (9)\n-0B11FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB11FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B125A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B125C   Length              0005 (5)\n-0B125E   Flags               01 (1) 'Modification'\n-0B125F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1263 LOCAL HEADER #271     04034B50 (67324752)\n-0B1267 Extract Zip Spec      14 (20) '2.0'\n-0B1268 Extract OS            00 (0) 'MS-DOS'\n-0B1269 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B126B Compression Method    0000 (0) 'Stored'\n-0B126D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1271 CRC                   00000000 (0)\n-0B1275 Compressed Size       00000000 (0)\n-0B1279 Uncompressed Size     00000000 (0)\n-0B127D Filename Length       0073 (115)\n-0B127F Extra Length          0009 (9)\n-0B1281 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1281: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B12F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B12F6   Length              0005 (5)\n-0B12F8   Flags               01 (1) 'Modification'\n-0B12F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B12FD PAYLOAD\n-\n-0B1D58 DATA DESCRIPTOR       08074B50 (134695760)\n-0B1D5C CRC                   B12610E6 (2972061926)\n-0B1D60 Compressed Size       00000A5B (2651)\n-0B1D64 Uncompressed Size     00000A5B (2651)\n-\n-0B1D68 LOCAL HEADER #272     04034B50 (67324752)\n-0B1D6C Extract Zip Spec      14 (20) '2.0'\n-0B1D6D Extract OS            00 (0) 'MS-DOS'\n-0B1D6E General Purpose Flag  0000 (0)\n-0B1D70 Compression Method    0000 (0) 'Stored'\n-0B1D72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1D76 CRC                   00000000 (0)\n-0B1D7A Compressed Size       00000000 (0)\n-0B1D7E Uncompressed Size     00000000 (0)\n-0B1D82 Filename Length       0035 (53)\n-0B1D84 Extra Length          0009 (9)\n-0B1D86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1D86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1DBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1DBD   Length              0005 (5)\n-0B1DBF   Flags               01 (1) 'Modification'\n-0B1DC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1DC4 LOCAL HEADER #273     04034B50 (67324752)\n-0B1DC8 Extract Zip Spec      14 (20) '2.0'\n-0B1DC9 Extract OS            00 (0) 'MS-DOS'\n-0B1DCA General Purpose Flag  0000 (0)\n-0B1DCC Compression Method    0000 (0) 'Stored'\n-0B1DCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1DD2 CRC                   00000000 (0)\n-0B1DD6 Compressed Size       00000000 (0)\n-0B1DDA Uncompressed Size     00000000 (0)\n-0B1DDE Filename Length       003E (62)\n-0B1DE0 Extra Length          0009 (9)\n-0B1DE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1DE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1E20 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1E22   Length              0005 (5)\n-0B1E24   Flags               01 (1) 'Modification'\n-0B1E25   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1E29 LOCAL HEADER #274     04034B50 (67324752)\n-0B1E2D Extract Zip Spec      14 (20) '2.0'\n-0B1E2E Extract OS            00 (0) 'MS-DOS'\n-0B1E2F General Purpose Flag  0000 (0)\n-0B1E31 Compression Method    0000 (0) 'Stored'\n-0B1E33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1E37 CRC                   00000000 (0)\n-0B1E3B Compressed Size       00000000 (0)\n-0B1E3F Uncompressed Size     00000000 (0)\n-0B1E43 Filename Length       0078 (120)\n-0B1E45 Extra Length          0009 (9)\n-0B1E47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB1E47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B1EBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1EC1   Length              0005 (5)\n-0B1EC3   Flags               01 (1) 'Modification'\n-0B1EC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B1EC8 LOCAL HEADER #275     04034B50 (67324752)\n-0B1ECC Extract Zip Spec      14 (20) '2.0'\n-0B1ECD Extract OS            00 (0) 'MS-DOS'\n-0B1ECE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B1ED0 Compression Method    0000 (0) 'Stored'\n-0B1ED2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B1ED6 CRC                   00000000 (0)\n-0B1EDA Compressed Size       00000000 (0)\n-0B1EDE Uncompressed Size     00000000 (0)\n-0B1EE2 Filename Length       008E (142)\n-0B1EE4 Extra Length          0009 (9)\n-0B1EE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0A1B47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A1B49   Length              0005 (5)\n+0A1B4B   Flags               01 (1) 'Modification'\n+0A1B4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A1B50 PAYLOAD\n+\n+0A2DC6 DATA DESCRIPTOR       08074B50 (134695760)\n+0A2DCA CRC                   26E963FE (652829694)\n+0A2DCE Compressed Size       00001276 (4726)\n+0A2DD2 Uncompressed Size     00001276 (4726)\n+\n+0A2DD6 LOCAL HEADER #256     04034B50 (67324752)\n+0A2DDA Extract Zip Spec      14 (20) '2.0'\n+0A2DDB Extract OS            00 (0) 'MS-DOS'\n+0A2DDC General Purpose Flag  0000 (0)\n+0A2DDE Compression Method    0000 (0) 'Stored'\n+0A2DE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A2DE4 CRC                   00000000 (0)\n+0A2DE8 Compressed Size       00000000 (0)\n+0A2DEC Uncompressed Size     00000000 (0)\n+0A2DF0 Filename Length       0028 (40)\n+0A2DF2 Extra Length          0009 (9)\n+0A2DF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA2DF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A2E1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A2E1E   Length              0005 (5)\n+0A2E20   Flags               01 (1) 'Modification'\n+0A2E21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A2E25 LOCAL HEADER #257     04034B50 (67324752)\n+0A2E29 Extract Zip Spec      14 (20) '2.0'\n+0A2E2A Extract OS            00 (0) 'MS-DOS'\n+0A2E2B General Purpose Flag  0000 (0)\n+0A2E2D Compression Method    0000 (0) 'Stored'\n+0A2E2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A2E33 CRC                   00000000 (0)\n+0A2E37 Compressed Size       00000000 (0)\n+0A2E3B Uncompressed Size     00000000 (0)\n+0A2E3F Filename Length       0031 (49)\n+0A2E41 Extra Length          0009 (9)\n+0A2E43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA2E43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A2E74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A2E76   Length              0005 (5)\n+0A2E78   Flags               01 (1) 'Modification'\n+0A2E79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A2E7D LOCAL HEADER #258     04034B50 (67324752)\n+0A2E81 Extract Zip Spec      14 (20) '2.0'\n+0A2E82 Extract OS            00 (0) 'MS-DOS'\n+0A2E83 General Purpose Flag  0000 (0)\n+0A2E85 Compression Method    0000 (0) 'Stored'\n+0A2E87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A2E8B CRC                   00000000 (0)\n+0A2E8F Compressed Size       00000000 (0)\n+0A2E93 Uncompressed Size     00000000 (0)\n+0A2E97 Filename Length       0061 (97)\n+0A2E99 Extra Length          0009 (9)\n+0A2E9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA2E9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A2EFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A2EFE   Length              0005 (5)\n+0A2F00   Flags               01 (1) 'Modification'\n+0A2F01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A2F05 LOCAL HEADER #259     04034B50 (67324752)\n+0A2F09 Extract Zip Spec      14 (20) '2.0'\n+0A2F0A Extract OS            00 (0) 'MS-DOS'\n+0A2F0B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A2F0D Compression Method    0000 (0) 'Stored'\n+0A2F0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A2F13 CRC                   00000000 (0)\n+0A2F17 Compressed Size       00000000 (0)\n+0A2F1B Uncompressed Size     00000000 (0)\n+0A2F1F Filename Length       0077 (119)\n+0A2F21 Extra Length          0009 (9)\n+0A2F23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA2F23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A2F9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A2F9C   Length              0005 (5)\n+0A2F9E   Flags               01 (1) 'Modification'\n+0A2F9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A2FA3 PAYLOAD\n+\n+0A8467 DATA DESCRIPTOR       08074B50 (134695760)\n+0A846B CRC                   9B32EF54 (2603806548)\n+0A846F Compressed Size       000054C4 (21700)\n+0A8473 Uncompressed Size     000054C4 (21700)\n+\n+0A8477 LOCAL HEADER #260     04034B50 (67324752)\n+0A847B Extract Zip Spec      14 (20) '2.0'\n+0A847C Extract OS            00 (0) 'MS-DOS'\n+0A847D General Purpose Flag  0000 (0)\n+0A847F Compression Method    0000 (0) 'Stored'\n+0A8481 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A8485 CRC                   00000000 (0)\n+0A8489 Compressed Size       00000000 (0)\n+0A848D Uncompressed Size     00000000 (0)\n+0A8491 Filename Length       0068 (104)\n+0A8493 Extra Length          0009 (9)\n+0A8495 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA8495: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A84FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A84FF   Length              0005 (5)\n+0A8501   Flags               01 (1) 'Modification'\n+0A8502   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0A8506 LOCAL HEADER #261     04034B50 (67324752)\n+0A850A Extract Zip Spec      14 (20) '2.0'\n+0A850B Extract OS            00 (0) 'MS-DOS'\n+0A850C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0A850E Compression Method    0000 (0) 'Stored'\n+0A8510 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A8514 CRC                   00000000 (0)\n+0A8518 Compressed Size       00000000 (0)\n+0A851C Uncompressed Size     00000000 (0)\n+0A8520 Filename Length       007E (126)\n+0A8522 Extra Length          0009 (9)\n+0A8524 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA8524: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A85A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A85A4   Length              0005 (5)\n+0A85A6   Flags               01 (1) 'Modification'\n+0A85A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A85AB PAYLOAD\n+\n+0AA0CC DATA DESCRIPTOR       08074B50 (134695760)\n+0AA0D0 CRC                   4975042F (1232405551)\n+0AA0D4 Compressed Size       00001B21 (6945)\n+0AA0D8 Uncompressed Size     00001B21 (6945)\n+\n+0AA0DC LOCAL HEADER #262     04034B50 (67324752)\n+0AA0E0 Extract Zip Spec      14 (20) '2.0'\n+0AA0E1 Extract OS            00 (0) 'MS-DOS'\n+0AA0E2 General Purpose Flag  0000 (0)\n+0AA0E4 Compression Method    0000 (0) 'Stored'\n+0AA0E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AA0EA CRC                   00000000 (0)\n+0AA0EE Compressed Size       00000000 (0)\n+0AA0F2 Uncompressed Size     00000000 (0)\n+0AA0F6 Filename Length       006B (107)\n+0AA0F8 Extra Length          0009 (9)\n+0AA0FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAA0FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AA165 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AA167   Length              0005 (5)\n+0AA169   Flags               01 (1) 'Modification'\n+0AA16A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AA16E LOCAL HEADER #263     04034B50 (67324752)\n+0AA172 Extract Zip Spec      14 (20) '2.0'\n+0AA173 Extract OS            00 (0) 'MS-DOS'\n+0AA174 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AA176 Compression Method    0000 (0) 'Stored'\n+0AA178 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AA17C CRC                   00000000 (0)\n+0AA180 Compressed Size       00000000 (0)\n+0AA184 Uncompressed Size     00000000 (0)\n+0AA188 Filename Length       0081 (129)\n+0AA18A Extra Length          0009 (9)\n+0AA18C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAA18C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AA20D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AA20F   Length              0005 (5)\n+0AA211   Flags               01 (1) 'Modification'\n+0AA212   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AA216 PAYLOAD\n+\n+0AB700 DATA DESCRIPTOR       08074B50 (134695760)\n+0AB704 CRC                   27E12F4C (669069132)\n+0AB708 Compressed Size       000014EA (5354)\n+0AB70C Uncompressed Size     000014EA (5354)\n+\n+0AB710 LOCAL HEADER #264     04034B50 (67324752)\n+0AB714 Extract Zip Spec      14 (20) '2.0'\n+0AB715 Extract OS            00 (0) 'MS-DOS'\n+0AB716 General Purpose Flag  0000 (0)\n+0AB718 Compression Method    0000 (0) 'Stored'\n+0AB71A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AB71E CRC                   00000000 (0)\n+0AB722 Compressed Size       00000000 (0)\n+0AB726 Uncompressed Size     00000000 (0)\n+0AB72A Filename Length       006B (107)\n+0AB72C Extra Length          0009 (9)\n+0AB72E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAB72E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AB799 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AB79B   Length              0005 (5)\n+0AB79D   Flags               01 (1) 'Modification'\n+0AB79E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AB7A2 LOCAL HEADER #265     04034B50 (67324752)\n+0AB7A6 Extract Zip Spec      14 (20) '2.0'\n+0AB7A7 Extract OS            00 (0) 'MS-DOS'\n+0AB7A8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AB7AA Compression Method    0000 (0) 'Stored'\n+0AB7AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AB7B0 CRC                   00000000 (0)\n+0AB7B4 Compressed Size       00000000 (0)\n+0AB7B8 Uncompressed Size     00000000 (0)\n+0AB7BC Filename Length       0081 (129)\n+0AB7BE Extra Length          0009 (9)\n+0AB7C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAB7C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AB841 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AB843   Length              0005 (5)\n+0AB845   Flags               01 (1) 'Modification'\n+0AB846   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AB84A PAYLOAD\n+\n+0AEF2A DATA DESCRIPTOR       08074B50 (134695760)\n+0AEF2E CRC                   3E8950DE (1049186526)\n+0AEF32 Compressed Size       000036E0 (14048)\n+0AEF36 Uncompressed Size     000036E0 (14048)\n+\n+0AEF3A LOCAL HEADER #266     04034B50 (67324752)\n+0AEF3E Extract Zip Spec      14 (20) '2.0'\n+0AEF3F Extract OS            00 (0) 'MS-DOS'\n+0AEF40 General Purpose Flag  0000 (0)\n+0AEF42 Compression Method    0000 (0) 'Stored'\n+0AEF44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AEF48 CRC                   00000000 (0)\n+0AEF4C Compressed Size       00000000 (0)\n+0AEF50 Uncompressed Size     00000000 (0)\n+0AEF54 Filename Length       006A (106)\n+0AEF56 Extra Length          0009 (9)\n+0AEF58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAEF58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AEFC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AEFC4   Length              0005 (5)\n+0AEFC6   Flags               01 (1) 'Modification'\n+0AEFC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0AEFCB LOCAL HEADER #267     04034B50 (67324752)\n+0AEFCF Extract Zip Spec      14 (20) '2.0'\n+0AEFD0 Extract OS            00 (0) 'MS-DOS'\n+0AEFD1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0AEFD3 Compression Method    0000 (0) 'Stored'\n+0AEFD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0AEFD9 CRC                   00000000 (0)\n+0AEFDD Compressed Size       00000000 (0)\n+0AEFE1 Uncompressed Size     00000000 (0)\n+0AEFE5 Filename Length       0080 (128)\n+0AEFE7 Extra Length          0009 (9)\n+0AEFE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAEFE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0AF069 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0AF06B   Length              0005 (5)\n+0AF06D   Flags               01 (1) 'Modification'\n+0AF06E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0AF072 PAYLOAD\n+\n+0B10C3 DATA DESCRIPTOR       08074B50 (134695760)\n+0B10C7 CRC                   A9B3A4D7 (2847122647)\n+0B10CB Compressed Size       00002051 (8273)\n+0B10CF Uncompressed Size     00002051 (8273)\n+\n+0B10D3 LOCAL HEADER #268     04034B50 (67324752)\n+0B10D7 Extract Zip Spec      14 (20) '2.0'\n+0B10D8 Extract OS            00 (0) 'MS-DOS'\n+0B10D9 General Purpose Flag  0000 (0)\n+0B10DB Compression Method    0000 (0) 'Stored'\n+0B10DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B10E1 CRC                   00000000 (0)\n+0B10E5 Compressed Size       00000000 (0)\n+0B10E9 Uncompressed Size     00000000 (0)\n+0B10ED Filename Length       0026 (38)\n+0B10EF Extra Length          0009 (9)\n+0B10F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB10F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1117 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1119   Length              0005 (5)\n+0B111B   Flags               01 (1) 'Modification'\n+0B111C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1120 LOCAL HEADER #269     04034B50 (67324752)\n+0B1124 Extract Zip Spec      14 (20) '2.0'\n+0B1125 Extract OS            00 (0) 'MS-DOS'\n+0B1126 General Purpose Flag  0000 (0)\n+0B1128 Compression Method    0000 (0) 'Stored'\n+0B112A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B112E CRC                   00000000 (0)\n+0B1132 Compressed Size       00000000 (0)\n+0B1136 Uncompressed Size     00000000 (0)\n+0B113A Filename Length       002F (47)\n+0B113C Extra Length          0009 (9)\n+0B113E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB113E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B116D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B116F   Length              0005 (5)\n+0B1171   Flags               01 (1) 'Modification'\n+0B1172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1176 LOCAL HEADER #270     04034B50 (67324752)\n+0B117A Extract Zip Spec      14 (20) '2.0'\n+0B117B Extract OS            00 (0) 'MS-DOS'\n+0B117C General Purpose Flag  0000 (0)\n+0B117E Compression Method    0000 (0) 'Stored'\n+0B1180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1184 CRC                   00000000 (0)\n+0B1188 Compressed Size       00000000 (0)\n+0B118C Uncompressed Size     00000000 (0)\n+0B1190 Filename Length       005D (93)\n+0B1192 Extra Length          0009 (9)\n+0B1194 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1194: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B11F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B11F3   Length              0005 (5)\n+0B11F5   Flags               01 (1) 'Modification'\n+0B11F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B11FA LOCAL HEADER #271     04034B50 (67324752)\n+0B11FE Extract Zip Spec      14 (20) '2.0'\n+0B11FF Extract OS            00 (0) 'MS-DOS'\n+0B1200 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B1202 Compression Method    0000 (0) 'Stored'\n+0B1204 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1208 CRC                   00000000 (0)\n+0B120C Compressed Size       00000000 (0)\n+0B1210 Uncompressed Size     00000000 (0)\n+0B1214 Filename Length       0073 (115)\n+0B1216 Extra Length          0009 (9)\n+0B1218 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1218: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B128B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B128D   Length              0005 (5)\n+0B128F   Flags               01 (1) 'Modification'\n+0B1290   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B1294 PAYLOAD\n+\n+0B1CEF DATA DESCRIPTOR       08074B50 (134695760)\n+0B1CF3 CRC                   B12610E6 (2972061926)\n+0B1CF7 Compressed Size       00000A5B (2651)\n+0B1CFB Uncompressed Size     00000A5B (2651)\n+\n+0B1CFF LOCAL HEADER #272     04034B50 (67324752)\n+0B1D03 Extract Zip Spec      14 (20) '2.0'\n+0B1D04 Extract OS            00 (0) 'MS-DOS'\n+0B1D05 General Purpose Flag  0000 (0)\n+0B1D07 Compression Method    0000 (0) 'Stored'\n+0B1D09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1D0D CRC                   00000000 (0)\n+0B1D11 Compressed Size       00000000 (0)\n+0B1D15 Uncompressed Size     00000000 (0)\n+0B1D19 Filename Length       0035 (53)\n+0B1D1B Extra Length          0009 (9)\n+0B1D1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1D1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1D52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1D54   Length              0005 (5)\n+0B1D56   Flags               01 (1) 'Modification'\n+0B1D57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1D5B LOCAL HEADER #273     04034B50 (67324752)\n+0B1D5F Extract Zip Spec      14 (20) '2.0'\n+0B1D60 Extract OS            00 (0) 'MS-DOS'\n+0B1D61 General Purpose Flag  0000 (0)\n+0B1D63 Compression Method    0000 (0) 'Stored'\n+0B1D65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1D69 CRC                   00000000 (0)\n+0B1D6D Compressed Size       00000000 (0)\n+0B1D71 Uncompressed Size     00000000 (0)\n+0B1D75 Filename Length       003E (62)\n+0B1D77 Extra Length          0009 (9)\n+0B1D79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1D79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1DB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1DB9   Length              0005 (5)\n+0B1DBB   Flags               01 (1) 'Modification'\n+0B1DBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1DC0 LOCAL HEADER #274     04034B50 (67324752)\n+0B1DC4 Extract Zip Spec      14 (20) '2.0'\n+0B1DC5 Extract OS            00 (0) 'MS-DOS'\n+0B1DC6 General Purpose Flag  0000 (0)\n+0B1DC8 Compression Method    0000 (0) 'Stored'\n+0B1DCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1DCE CRC                   00000000 (0)\n+0B1DD2 Compressed Size       00000000 (0)\n+0B1DD6 Uncompressed Size     00000000 (0)\n+0B1DDA Filename Length       0078 (120)\n+0B1DDC Extra Length          0009 (9)\n+0B1DDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB1DDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1E56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1E58   Length              0005 (5)\n+0B1E5A   Flags               01 (1) 'Modification'\n+0B1E5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B1E5F LOCAL HEADER #275     04034B50 (67324752)\n+0B1E63 Extract Zip Spec      14 (20) '2.0'\n+0B1E64 Extract OS            00 (0) 'MS-DOS'\n+0B1E65 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B1E67 Compression Method    0000 (0) 'Stored'\n+0B1E69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B1E6D CRC                   00000000 (0)\n+0B1E71 Compressed Size       00000000 (0)\n+0B1E75 Uncompressed Size     00000000 (0)\n+0B1E79 Filename Length       008E (142)\n+0B1E7B Extra Length          0009 (9)\n+0B1E7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0xB1EE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB1E7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B1F74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B1F76   Length              0005 (5)\n-0B1F78   Flags               01 (1) 'Modification'\n-0B1F79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B1F7D PAYLOAD\n-\n-0B2A9F DATA DESCRIPTOR       08074B50 (134695760)\n-0B2AA3 CRC                   041CE92B (69003563)\n-0B2AA7 Compressed Size       00000B22 (2850)\n-0B2AAB Uncompressed Size     00000B22 (2850)\n-\n-0B2AAF LOCAL HEADER #276     04034B50 (67324752)\n-0B2AB3 Extract Zip Spec      14 (20) '2.0'\n-0B2AB4 Extract OS            00 (0) 'MS-DOS'\n-0B2AB5 General Purpose Flag  0000 (0)\n-0B2AB7 Compression Method    0000 (0) 'Stored'\n-0B2AB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2ABD CRC                   00000000 (0)\n-0B2AC1 Compressed Size       00000000 (0)\n-0B2AC5 Uncompressed Size     00000000 (0)\n-0B2AC9 Filename Length       0077 (119)\n-0B2ACB Extra Length          0009 (9)\n-0B2ACD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB2ACD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B2B44 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2B46   Length              0005 (5)\n-0B2B48   Flags               01 (1) 'Modification'\n-0B2B49   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B2B4D LOCAL HEADER #277     04034B50 (67324752)\n-0B2B51 Extract Zip Spec      14 (20) '2.0'\n-0B2B52 Extract OS            00 (0) 'MS-DOS'\n-0B2B53 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B2B55 Compression Method    0000 (0) 'Stored'\n-0B2B57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B2B5B CRC                   00000000 (0)\n-0B2B5F Compressed Size       00000000 (0)\n-0B2B63 Uncompressed Size     00000000 (0)\n-0B2B67 Filename Length       008D (141)\n-0B2B69 Extra Length          0009 (9)\n-0B2B6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B1F0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1F0D   Length              0005 (5)\n+0B1F0F   Flags               01 (1) 'Modification'\n+0B1F10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B1F14 PAYLOAD\n+\n+0B2A36 DATA DESCRIPTOR       08074B50 (134695760)\n+0B2A3A CRC                   041CE92B (69003563)\n+0B2A3E Compressed Size       00000B22 (2850)\n+0B2A42 Uncompressed Size     00000B22 (2850)\n+\n+0B2A46 LOCAL HEADER #276     04034B50 (67324752)\n+0B2A4A Extract Zip Spec      14 (20) '2.0'\n+0B2A4B Extract OS            00 (0) 'MS-DOS'\n+0B2A4C General Purpose Flag  0000 (0)\n+0B2A4E Compression Method    0000 (0) 'Stored'\n+0B2A50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B2A54 CRC                   00000000 (0)\n+0B2A58 Compressed Size       00000000 (0)\n+0B2A5C Uncompressed Size     00000000 (0)\n+0B2A60 Filename Length       0077 (119)\n+0B2A62 Extra Length          0009 (9)\n+0B2A64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB2A64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B2ADB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B2ADD   Length              0005 (5)\n+0B2ADF   Flags               01 (1) 'Modification'\n+0B2AE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B2AE4 LOCAL HEADER #277     04034B50 (67324752)\n+0B2AE8 Extract Zip Spec      14 (20) '2.0'\n+0B2AE9 Extract OS            00 (0) 'MS-DOS'\n+0B2AEA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B2AEC Compression Method    0000 (0) 'Stored'\n+0B2AEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B2AF2 CRC                   00000000 (0)\n+0B2AF6 Compressed Size       00000000 (0)\n+0B2AFA Uncompressed Size     00000000 (0)\n+0B2AFE Filename Length       008D (141)\n+0B2B00 Extra Length          0009 (9)\n+0B2B02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0xB2B6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB2B02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B2BF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B2BFA   Length              0005 (5)\n-0B2BFC   Flags               01 (1) 'Modification'\n-0B2BFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B2C01 PAYLOAD\n-\n-0B42E5 DATA DESCRIPTOR       08074B50 (134695760)\n-0B42E9 CRC                   16A4BA93 (379894419)\n-0B42ED Compressed Size       000016E4 (5860)\n-0B42F1 Uncompressed Size     000016E4 (5860)\n-\n-0B42F5 LOCAL HEADER #278     04034B50 (67324752)\n-0B42F9 Extract Zip Spec      14 (20) '2.0'\n-0B42FA Extract OS            00 (0) 'MS-DOS'\n-0B42FB General Purpose Flag  0000 (0)\n-0B42FD Compression Method    0000 (0) 'Stored'\n-0B42FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B4303 CRC                   00000000 (0)\n-0B4307 Compressed Size       00000000 (0)\n-0B430B Uncompressed Size     00000000 (0)\n-0B430F Filename Length       007A (122)\n-0B4311 Extra Length          0009 (9)\n-0B4313 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB4313: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B438D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B438F   Length              0005 (5)\n-0B4391   Flags               01 (1) 'Modification'\n-0B4392   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B4396 LOCAL HEADER #279     04034B50 (67324752)\n-0B439A Extract Zip Spec      14 (20) '2.0'\n-0B439B Extract OS            00 (0) 'MS-DOS'\n-0B439C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B439E Compression Method    0000 (0) 'Stored'\n-0B43A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B43A4 CRC                   00000000 (0)\n-0B43A8 Compressed Size       00000000 (0)\n-0B43AC Uncompressed Size     00000000 (0)\n-0B43B0 Filename Length       0090 (144)\n-0B43B2 Extra Length          0009 (9)\n-0B43B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B2B8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B2B91   Length              0005 (5)\n+0B2B93   Flags               01 (1) 'Modification'\n+0B2B94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B2B98 PAYLOAD\n+\n+0B427C DATA DESCRIPTOR       08074B50 (134695760)\n+0B4280 CRC                   16A4BA93 (379894419)\n+0B4284 Compressed Size       000016E4 (5860)\n+0B4288 Uncompressed Size     000016E4 (5860)\n+\n+0B428C LOCAL HEADER #278     04034B50 (67324752)\n+0B4290 Extract Zip Spec      14 (20) '2.0'\n+0B4291 Extract OS            00 (0) 'MS-DOS'\n+0B4292 General Purpose Flag  0000 (0)\n+0B4294 Compression Method    0000 (0) 'Stored'\n+0B4296 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B429A CRC                   00000000 (0)\n+0B429E Compressed Size       00000000 (0)\n+0B42A2 Uncompressed Size     00000000 (0)\n+0B42A6 Filename Length       007A (122)\n+0B42A8 Extra Length          0009 (9)\n+0B42AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB42AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B4324 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B4326   Length              0005 (5)\n+0B4328   Flags               01 (1) 'Modification'\n+0B4329   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B432D LOCAL HEADER #279     04034B50 (67324752)\n+0B4331 Extract Zip Spec      14 (20) '2.0'\n+0B4332 Extract OS            00 (0) 'MS-DOS'\n+0B4333 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B4335 Compression Method    0000 (0) 'Stored'\n+0B4337 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B433B CRC                   00000000 (0)\n+0B433F Compressed Size       00000000 (0)\n+0B4343 Uncompressed Size     00000000 (0)\n+0B4347 Filename Length       0090 (144)\n+0B4349 Extra Length          0009 (9)\n+0B434B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB43B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB434B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B4444 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B4446   Length              0005 (5)\n-0B4448   Flags               01 (1) 'Modification'\n-0B4449   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B444D PAYLOAD\n-\n-0B54B5 DATA DESCRIPTOR       08074B50 (134695760)\n-0B54B9 CRC                   390AB403 (957002755)\n-0B54BD Compressed Size       00001068 (4200)\n-0B54C1 Uncompressed Size     00001068 (4200)\n-\n-0B54C5 LOCAL HEADER #280     04034B50 (67324752)\n-0B54C9 Extract Zip Spec      14 (20) '2.0'\n-0B54CA Extract OS            00 (0) 'MS-DOS'\n-0B54CB General Purpose Flag  0000 (0)\n-0B54CD Compression Method    0000 (0) 'Stored'\n-0B54CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B54D3 CRC                   00000000 (0)\n-0B54D7 Compressed Size       00000000 (0)\n-0B54DB Uncompressed Size     00000000 (0)\n-0B54DF Filename Length       0076 (118)\n-0B54E1 Extra Length          0009 (9)\n-0B54E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB54E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B5559 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B555B   Length              0005 (5)\n-0B555D   Flags               01 (1) 'Modification'\n-0B555E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B5562 LOCAL HEADER #281     04034B50 (67324752)\n-0B5566 Extract Zip Spec      14 (20) '2.0'\n-0B5567 Extract OS            00 (0) 'MS-DOS'\n-0B5568 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B556A Compression Method    0000 (0) 'Stored'\n-0B556C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B5570 CRC                   00000000 (0)\n-0B5574 Compressed Size       00000000 (0)\n-0B5578 Uncompressed Size     00000000 (0)\n-0B557C Filename Length       008C (140)\n-0B557E Extra Length          0009 (9)\n-0B5580 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B43DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B43DD   Length              0005 (5)\n+0B43DF   Flags               01 (1) 'Modification'\n+0B43E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B43E4 PAYLOAD\n+\n+0B544C DATA DESCRIPTOR       08074B50 (134695760)\n+0B5450 CRC                   390AB403 (957002755)\n+0B5454 Compressed Size       00001068 (4200)\n+0B5458 Uncompressed Size     00001068 (4200)\n+\n+0B545C LOCAL HEADER #280     04034B50 (67324752)\n+0B5460 Extract Zip Spec      14 (20) '2.0'\n+0B5461 Extract OS            00 (0) 'MS-DOS'\n+0B5462 General Purpose Flag  0000 (0)\n+0B5464 Compression Method    0000 (0) 'Stored'\n+0B5466 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B546A CRC                   00000000 (0)\n+0B546E Compressed Size       00000000 (0)\n+0B5472 Uncompressed Size     00000000 (0)\n+0B5476 Filename Length       0076 (118)\n+0B5478 Extra Length          0009 (9)\n+0B547A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB547A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B54F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B54F2   Length              0005 (5)\n+0B54F4   Flags               01 (1) 'Modification'\n+0B54F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B54F9 LOCAL HEADER #281     04034B50 (67324752)\n+0B54FD Extract Zip Spec      14 (20) '2.0'\n+0B54FE Extract OS            00 (0) 'MS-DOS'\n+0B54FF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B5501 Compression Method    0000 (0) 'Stored'\n+0B5503 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B5507 CRC                   00000000 (0)\n+0B550B Compressed Size       00000000 (0)\n+0B550F Uncompressed Size     00000000 (0)\n+0B5513 Filename Length       008C (140)\n+0B5515 Extra Length          0009 (9)\n+0B5517 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0xB5580: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB5517: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B560C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B560E   Length              0005 (5)\n-0B5610   Flags               01 (1) 'Modification'\n-0B5611   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B5615 PAYLOAD\n-\n-0B6CBF DATA DESCRIPTOR       08074B50 (134695760)\n-0B6CC3 CRC                   3DE98548 (1038714184)\n-0B6CC7 Compressed Size       000016AA (5802)\n-0B6CCB Uncompressed Size     000016AA (5802)\n-\n-0B6CCF LOCAL HEADER #282     04034B50 (67324752)\n-0B6CD3 Extract Zip Spec      14 (20) '2.0'\n-0B6CD4 Extract OS            00 (0) 'MS-DOS'\n-0B6CD5 General Purpose Flag  0000 (0)\n-0B6CD7 Compression Method    0000 (0) 'Stored'\n-0B6CD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6CDD CRC                   00000000 (0)\n-0B6CE1 Compressed Size       00000000 (0)\n-0B6CE5 Uncompressed Size     00000000 (0)\n-0B6CE9 Filename Length       0024 (36)\n-0B6CEB Extra Length          0009 (9)\n-0B6CED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6CED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6D11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6D13   Length              0005 (5)\n-0B6D15   Flags               01 (1) 'Modification'\n-0B6D16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B6D1A LOCAL HEADER #283     04034B50 (67324752)\n-0B6D1E Extract Zip Spec      14 (20) '2.0'\n-0B6D1F Extract OS            00 (0) 'MS-DOS'\n-0B6D20 General Purpose Flag  0000 (0)\n-0B6D22 Compression Method    0000 (0) 'Stored'\n-0B6D24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6D28 CRC                   00000000 (0)\n-0B6D2C Compressed Size       00000000 (0)\n-0B6D30 Uncompressed Size     00000000 (0)\n-0B6D34 Filename Length       002D (45)\n-0B6D36 Extra Length          0009 (9)\n-0B6D38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6D38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6D65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6D67   Length              0005 (5)\n-0B6D69   Flags               01 (1) 'Modification'\n-0B6D6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B6D6E LOCAL HEADER #284     04034B50 (67324752)\n-0B6D72 Extract Zip Spec      14 (20) '2.0'\n-0B6D73 Extract OS            00 (0) 'MS-DOS'\n-0B6D74 General Purpose Flag  0000 (0)\n-0B6D76 Compression Method    0000 (0) 'Stored'\n-0B6D78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6D7C CRC                   00000000 (0)\n-0B6D80 Compressed Size       00000000 (0)\n-0B6D84 Uncompressed Size     00000000 (0)\n-0B6D88 Filename Length       005B (91)\n-0B6D8A Extra Length          0009 (9)\n-0B6D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6DE7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6DE9   Length              0005 (5)\n-0B6DEB   Flags               01 (1) 'Modification'\n-0B6DEC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B6DF0 LOCAL HEADER #285     04034B50 (67324752)\n-0B6DF4 Extract Zip Spec      14 (20) '2.0'\n-0B6DF5 Extract OS            00 (0) 'MS-DOS'\n-0B6DF6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B6DF8 Compression Method    0000 (0) 'Stored'\n-0B6DFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B6DFE CRC                   00000000 (0)\n-0B6E02 Compressed Size       00000000 (0)\n-0B6E06 Uncompressed Size     00000000 (0)\n-0B6E0A Filename Length       0071 (113)\n-0B6E0C Extra Length          0009 (9)\n-0B6E0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB6E0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B6E7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B6E81   Length              0005 (5)\n-0B6E83   Flags               01 (1) 'Modification'\n-0B6E84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B6E88 PAYLOAD\n-\n-0B8730 DATA DESCRIPTOR       08074B50 (134695760)\n-0B8734 CRC                   561A3BB2 (1444559794)\n-0B8738 Compressed Size       000018A8 (6312)\n-0B873C Uncompressed Size     000018A8 (6312)\n-\n-0B8740 LOCAL HEADER #286     04034B50 (67324752)\n-0B8744 Extract Zip Spec      14 (20) '2.0'\n-0B8745 Extract OS            00 (0) 'MS-DOS'\n-0B8746 General Purpose Flag  0000 (0)\n-0B8748 Compression Method    0000 (0) 'Stored'\n-0B874A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B874E CRC                   00000000 (0)\n-0B8752 Compressed Size       00000000 (0)\n-0B8756 Uncompressed Size     00000000 (0)\n-0B875A Filename Length       005A (90)\n-0B875C Extra Length          0009 (9)\n-0B875E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB875E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B87B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B87BA   Length              0005 (5)\n-0B87BC   Flags               01 (1) 'Modification'\n-0B87BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0B87C1 LOCAL HEADER #287     04034B50 (67324752)\n-0B87C5 Extract Zip Spec      14 (20) '2.0'\n-0B87C6 Extract OS            00 (0) 'MS-DOS'\n-0B87C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0B87C9 Compression Method    0000 (0) 'Stored'\n-0B87CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0B87CF CRC                   00000000 (0)\n-0B87D3 Compressed Size       00000000 (0)\n-0B87D7 Uncompressed Size     00000000 (0)\n-0B87DB Filename Length       0070 (112)\n-0B87DD Extra Length          0009 (9)\n-0B87DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xB87DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B884F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B8851   Length              0005 (5)\n-0B8853   Flags               01 (1) 'Modification'\n-0B8854   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B8858 PAYLOAD\n-\n-0BA31A DATA DESCRIPTOR       08074B50 (134695760)\n-0BA31E CRC                   A1D18B9C (2714864540)\n-0BA322 Compressed Size       00001AC2 (6850)\n-0BA326 Uncompressed Size     00001AC2 (6850)\n-\n-0BA32A LOCAL HEADER #288     04034B50 (67324752)\n-0BA32E Extract Zip Spec      14 (20) '2.0'\n-0BA32F Extract OS            00 (0) 'MS-DOS'\n-0BA330 General Purpose Flag  0000 (0)\n-0BA332 Compression Method    0000 (0) 'Stored'\n-0BA334 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BA338 CRC                   00000000 (0)\n-0BA33C Compressed Size       00000000 (0)\n-0BA340 Uncompressed Size     00000000 (0)\n-0BA344 Filename Length       005B (91)\n-0BA346 Extra Length          0009 (9)\n-0BA348 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBA348: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BA3A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BA3A5   Length              0005 (5)\n-0BA3A7   Flags               01 (1) 'Modification'\n-0BA3A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BA3AC LOCAL HEADER #289     04034B50 (67324752)\n-0BA3B0 Extract Zip Spec      14 (20) '2.0'\n-0BA3B1 Extract OS            00 (0) 'MS-DOS'\n-0BA3B2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BA3B4 Compression Method    0000 (0) 'Stored'\n-0BA3B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BA3BA CRC                   00000000 (0)\n-0BA3BE Compressed Size       00000000 (0)\n-0BA3C2 Uncompressed Size     00000000 (0)\n-0BA3C6 Filename Length       0071 (113)\n-0BA3C8 Extra Length          0009 (9)\n-0BA3CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBA3CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BA43B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BA43D   Length              0005 (5)\n-0BA43F   Flags               01 (1) 'Modification'\n-0BA440   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BA444 PAYLOAD\n-\n-0BB7DD DATA DESCRIPTOR       08074B50 (134695760)\n-0BB7E1 CRC                   33231FD5 (857939925)\n-0BB7E5 Compressed Size       00001399 (5017)\n-0BB7E9 Uncompressed Size     00001399 (5017)\n-\n-0BB7ED LOCAL HEADER #290     04034B50 (67324752)\n-0BB7F1 Extract Zip Spec      14 (20) '2.0'\n-0BB7F2 Extract OS            00 (0) 'MS-DOS'\n-0BB7F3 General Purpose Flag  0000 (0)\n-0BB7F5 Compression Method    0000 (0) 'Stored'\n-0BB7F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB7FB CRC                   00000000 (0)\n-0BB7FF Compressed Size       00000000 (0)\n-0BB803 Uncompressed Size     00000000 (0)\n-0BB807 Filename Length       0023 (35)\n-0BB809 Extra Length          0009 (9)\n-0BB80B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB80B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB82E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB830   Length              0005 (5)\n-0BB832   Flags               01 (1) 'Modification'\n-0BB833   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB837 LOCAL HEADER #291     04034B50 (67324752)\n-0BB83B Extract Zip Spec      14 (20) '2.0'\n-0BB83C Extract OS            00 (0) 'MS-DOS'\n-0BB83D General Purpose Flag  0000 (0)\n-0BB83F Compression Method    0000 (0) 'Stored'\n-0BB841 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB845 CRC                   00000000 (0)\n-0BB849 Compressed Size       00000000 (0)\n-0BB84D Uncompressed Size     00000000 (0)\n-0BB851 Filename Length       002C (44)\n-0BB853 Extra Length          0009 (9)\n-0BB855 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB855: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB881 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB883   Length              0005 (5)\n-0BB885   Flags               01 (1) 'Modification'\n-0BB886   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB88A LOCAL HEADER #292     04034B50 (67324752)\n-0BB88E Extract Zip Spec      14 (20) '2.0'\n-0BB88F Extract OS            00 (0) 'MS-DOS'\n-0BB890 General Purpose Flag  0000 (0)\n-0BB892 Compression Method    0000 (0) 'Stored'\n-0BB894 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB898 CRC                   00000000 (0)\n-0BB89C Compressed Size       00000000 (0)\n-0BB8A0 Uncompressed Size     00000000 (0)\n-0BB8A4 Filename Length       0054 (84)\n-0BB8A6 Extra Length          0009 (9)\n-0BB8A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB8A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB8FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB8FE   Length              0005 (5)\n-0BB900   Flags               01 (1) 'Modification'\n-0BB901   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BB905 LOCAL HEADER #293     04034B50 (67324752)\n-0BB909 Extract Zip Spec      14 (20) '2.0'\n-0BB90A Extract OS            00 (0) 'MS-DOS'\n-0BB90B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BB90D Compression Method    0000 (0) 'Stored'\n-0BB90F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BB913 CRC                   00000000 (0)\n-0BB917 Compressed Size       00000000 (0)\n-0BB91B Uncompressed Size     00000000 (0)\n-0BB91F Filename Length       006A (106)\n-0BB921 Extra Length          0009 (9)\n-0BB923 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBB923: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BB98D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BB98F   Length              0005 (5)\n-0BB991   Flags               01 (1) 'Modification'\n-0BB992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BB996 PAYLOAD\n-\n-0BC68E DATA DESCRIPTOR       08074B50 (134695760)\n-0BC692 CRC                   63C353AF (1673745327)\n-0BC696 Compressed Size       00000CF8 (3320)\n-0BC69A Uncompressed Size     00000CF8 (3320)\n-\n-0BC69E LOCAL HEADER #294     04034B50 (67324752)\n-0BC6A2 Extract Zip Spec      14 (20) '2.0'\n-0BC6A3 Extract OS            00 (0) 'MS-DOS'\n-0BC6A4 General Purpose Flag  0000 (0)\n-0BC6A6 Compression Method    0000 (0) 'Stored'\n-0BC6A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BC6AC CRC                   00000000 (0)\n-0BC6B0 Compressed Size       00000000 (0)\n-0BC6B4 Uncompressed Size     00000000 (0)\n-0BC6B8 Filename Length       005B (91)\n-0BC6BA Extra Length          0009 (9)\n-0BC6BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBC6BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BC717 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BC719   Length              0005 (5)\n-0BC71B   Flags               01 (1) 'Modification'\n-0BC71C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BC720 LOCAL HEADER #295     04034B50 (67324752)\n-0BC724 Extract Zip Spec      14 (20) '2.0'\n-0BC725 Extract OS            00 (0) 'MS-DOS'\n-0BC726 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BC728 Compression Method    0000 (0) 'Stored'\n-0BC72A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BC72E CRC                   00000000 (0)\n-0BC732 Compressed Size       00000000 (0)\n-0BC736 Uncompressed Size     00000000 (0)\n-0BC73A Filename Length       0071 (113)\n-0BC73C Extra Length          0009 (9)\n-0BC73E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBC73E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BC7AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BC7B1   Length              0005 (5)\n-0BC7B3   Flags               01 (1) 'Modification'\n-0BC7B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BC7B8 PAYLOAD\n-\n-0BCEDB DATA DESCRIPTOR       08074B50 (134695760)\n-0BCEDF CRC                   C64481A5 (3326378405)\n-0BCEE3 Compressed Size       00000723 (1827)\n-0BCEE7 Uncompressed Size     00000723 (1827)\n-\n-0BCEEB LOCAL HEADER #296     04034B50 (67324752)\n-0BCEEF Extract Zip Spec      14 (20) '2.0'\n-0BCEF0 Extract OS            00 (0) 'MS-DOS'\n-0BCEF1 General Purpose Flag  0000 (0)\n-0BCEF3 Compression Method    0000 (0) 'Stored'\n-0BCEF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BCEF9 CRC                   00000000 (0)\n-0BCEFD Compressed Size       00000000 (0)\n-0BCF01 Uncompressed Size     00000000 (0)\n-0BCF05 Filename Length       0059 (89)\n-0BCF07 Extra Length          0009 (9)\n-0BCF09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBCF09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BCF62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BCF64   Length              0005 (5)\n-0BCF66   Flags               01 (1) 'Modification'\n-0BCF67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BCF6B LOCAL HEADER #297     04034B50 (67324752)\n-0BCF6F Extract Zip Spec      14 (20) '2.0'\n-0BCF70 Extract OS            00 (0) 'MS-DOS'\n-0BCF71 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BCF73 Compression Method    0000 (0) 'Stored'\n-0BCF75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BCF79 CRC                   00000000 (0)\n-0BCF7D Compressed Size       00000000 (0)\n-0BCF81 Uncompressed Size     00000000 (0)\n-0BCF85 Filename Length       006F (111)\n-0BCF87 Extra Length          0009 (9)\n-0BCF89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBCF89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BCFF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BCFFA   Length              0005 (5)\n-0BCFFC   Flags               01 (1) 'Modification'\n-0BCFFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BD001 PAYLOAD\n-\n-0BD6E3 DATA DESCRIPTOR       08074B50 (134695760)\n-0BD6E7 CRC                   39649106 (962892038)\n-0BD6EB Compressed Size       000006E2 (1762)\n-0BD6EF Uncompressed Size     000006E2 (1762)\n-\n-0BD6F3 LOCAL HEADER #298     04034B50 (67324752)\n-0BD6F7 Extract Zip Spec      14 (20) '2.0'\n-0BD6F8 Extract OS            00 (0) 'MS-DOS'\n-0BD6F9 General Purpose Flag  0000 (0)\n-0BD6FB Compression Method    0000 (0) 'Stored'\n-0BD6FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BD701 CRC                   00000000 (0)\n-0BD705 Compressed Size       00000000 (0)\n-0BD709 Uncompressed Size     00000000 (0)\n-0BD70D Filename Length       0054 (84)\n-0BD70F Extra Length          0009 (9)\n-0BD711 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBD711: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BD765 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BD767   Length              0005 (5)\n-0BD769   Flags               01 (1) 'Modification'\n-0BD76A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BD76E LOCAL HEADER #299     04034B50 (67324752)\n-0BD772 Extract Zip Spec      14 (20) '2.0'\n-0BD773 Extract OS            00 (0) 'MS-DOS'\n-0BD774 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BD776 Compression Method    0000 (0) 'Stored'\n-0BD778 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BD77C CRC                   00000000 (0)\n-0BD780 Compressed Size       00000000 (0)\n-0BD784 Uncompressed Size     00000000 (0)\n-0BD788 Filename Length       006A (106)\n-0BD78A Extra Length          0009 (9)\n-0BD78C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBD78C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BD7F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BD7F8   Length              0005 (5)\n-0BD7FA   Flags               01 (1) 'Modification'\n-0BD7FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BD7FF PAYLOAD\n-\n-0BDF81 DATA DESCRIPTOR       08074B50 (134695760)\n-0BDF85 CRC                   8DC8B44C (2378740812)\n-0BDF89 Compressed Size       00000782 (1922)\n-0BDF8D Uncompressed Size     00000782 (1922)\n-\n-0BDF91 LOCAL HEADER #300     04034B50 (67324752)\n-0BDF95 Extract Zip Spec      14 (20) '2.0'\n-0BDF96 Extract OS            00 (0) 'MS-DOS'\n-0BDF97 General Purpose Flag  0000 (0)\n-0BDF99 Compression Method    0000 (0) 'Stored'\n-0BDF9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BDF9F CRC                   00000000 (0)\n-0BDFA3 Compressed Size       00000000 (0)\n-0BDFA7 Uncompressed Size     00000000 (0)\n-0BDFAB Filename Length       0025 (37)\n-0BDFAD Extra Length          0009 (9)\n-0BDFAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBDFAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BDFD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BDFD6   Length              0005 (5)\n-0BDFD8   Flags               01 (1) 'Modification'\n-0BDFD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BDFDD LOCAL HEADER #301     04034B50 (67324752)\n-0BDFE1 Extract Zip Spec      14 (20) '2.0'\n-0BDFE2 Extract OS            00 (0) 'MS-DOS'\n-0BDFE3 General Purpose Flag  0000 (0)\n-0BDFE5 Compression Method    0000 (0) 'Stored'\n-0BDFE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BDFEB CRC                   00000000 (0)\n-0BDFEF Compressed Size       00000000 (0)\n-0BDFF3 Uncompressed Size     00000000 (0)\n-0BDFF7 Filename Length       002E (46)\n-0BDFF9 Extra Length          0009 (9)\n-0BDFFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBDFFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BE029 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BE02B   Length              0005 (5)\n-0BE02D   Flags               01 (1) 'Modification'\n-0BE02E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BE032 LOCAL HEADER #302     04034B50 (67324752)\n-0BE036 Extract Zip Spec      14 (20) '2.0'\n-0BE037 Extract OS            00 (0) 'MS-DOS'\n-0BE038 General Purpose Flag  0000 (0)\n-0BE03A Compression Method    0000 (0) 'Stored'\n-0BE03C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BE040 CRC                   00000000 (0)\n-0BE044 Compressed Size       00000000 (0)\n-0BE048 Uncompressed Size     00000000 (0)\n-0BE04C Filename Length       005E (94)\n-0BE04E Extra Length          0009 (9)\n-0BE050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBE050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BE0AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BE0B0   Length              0005 (5)\n-0BE0B2   Flags               01 (1) 'Modification'\n-0BE0B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BE0B7 LOCAL HEADER #303     04034B50 (67324752)\n-0BE0BB Extract Zip Spec      14 (20) '2.0'\n-0BE0BC Extract OS            00 (0) 'MS-DOS'\n-0BE0BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BE0BF Compression Method    0000 (0) 'Stored'\n-0BE0C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BE0C5 CRC                   00000000 (0)\n-0BE0C9 Compressed Size       00000000 (0)\n-0BE0CD Uncompressed Size     00000000 (0)\n-0BE0D1 Filename Length       0074 (116)\n-0BE0D3 Extra Length          0009 (9)\n-0BE0D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBE0D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BE149 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BE14B   Length              0005 (5)\n-0BE14D   Flags               01 (1) 'Modification'\n-0BE14E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BE152 PAYLOAD\n-\n-0BEFEC DATA DESCRIPTOR       08074B50 (134695760)\n-0BEFF0 CRC                   335CA1CD (861708749)\n-0BEFF4 Compressed Size       00000E9A (3738)\n-0BEFF8 Uncompressed Size     00000E9A (3738)\n-\n-0BEFFC LOCAL HEADER #304     04034B50 (67324752)\n-0BF000 Extract Zip Spec      14 (20) '2.0'\n-0BF001 Extract OS            00 (0) 'MS-DOS'\n-0BF002 General Purpose Flag  0000 (0)\n-0BF004 Compression Method    0000 (0) 'Stored'\n-0BF006 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF00A CRC                   00000000 (0)\n-0BF00E Compressed Size       00000000 (0)\n-0BF012 Uncompressed Size     00000000 (0)\n-0BF016 Filename Length       006A (106)\n-0BF018 Extra Length          0009 (9)\n-0BF01A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF01A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF084 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF086   Length              0005 (5)\n-0BF088   Flags               01 (1) 'Modification'\n-0BF089   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0BF08D LOCAL HEADER #305     04034B50 (67324752)\n-0BF091 Extract Zip Spec      14 (20) '2.0'\n-0BF092 Extract OS            00 (0) 'MS-DOS'\n-0BF093 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0BF095 Compression Method    0000 (0) 'Stored'\n-0BF097 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BF09B CRC                   00000000 (0)\n-0BF09F Compressed Size       00000000 (0)\n-0BF0A3 Uncompressed Size     00000000 (0)\n-0BF0A7 Filename Length       0080 (128)\n-0BF0A9 Extra Length          0009 (9)\n-0BF0AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBF0AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BF12B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BF12D   Length              0005 (5)\n-0BF12F   Flags               01 (1) 'Modification'\n-0BF130   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BF134 PAYLOAD\n-\n-0C018D DATA DESCRIPTOR       08074B50 (134695760)\n-0C0191 CRC                   3EE7FDDD (1055391197)\n-0C0195 Compressed Size       00001059 (4185)\n-0C0199 Uncompressed Size     00001059 (4185)\n-\n-0C019D LOCAL HEADER #306     04034B50 (67324752)\n-0C01A1 Extract Zip Spec      14 (20) '2.0'\n-0C01A2 Extract OS            00 (0) 'MS-DOS'\n-0C01A3 General Purpose Flag  0000 (0)\n-0C01A5 Compression Method    0000 (0) 'Stored'\n-0C01A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C01AB CRC                   00000000 (0)\n-0C01AF Compressed Size       00000000 (0)\n-0C01B3 Uncompressed Size     00000000 (0)\n-0C01B7 Filename Length       0027 (39)\n-0C01B9 Extra Length          0009 (9)\n-0C01BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC01BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C01E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C01E4   Length              0005 (5)\n-0C01E6   Flags               01 (1) 'Modification'\n-0C01E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C01EB LOCAL HEADER #307     04034B50 (67324752)\n-0C01EF Extract Zip Spec      14 (20) '2.0'\n-0C01F0 Extract OS            00 (0) 'MS-DOS'\n-0C01F1 General Purpose Flag  0000 (0)\n-0C01F3 Compression Method    0000 (0) 'Stored'\n-0C01F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C01F9 CRC                   00000000 (0)\n-0C01FD Compressed Size       00000000 (0)\n-0C0201 Uncompressed Size     00000000 (0)\n-0C0205 Filename Length       0030 (48)\n-0C0207 Extra Length          0009 (9)\n-0C0209 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0209: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C0239 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C023B   Length              0005 (5)\n-0C023D   Flags               01 (1) 'Modification'\n-0C023E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C0242 LOCAL HEADER #308     04034B50 (67324752)\n-0C0246 Extract Zip Spec      14 (20) '2.0'\n-0C0247 Extract OS            00 (0) 'MS-DOS'\n-0C0248 General Purpose Flag  0000 (0)\n-0C024A Compression Method    0000 (0) 'Stored'\n-0C024C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0250 CRC                   00000000 (0)\n-0C0254 Compressed Size       00000000 (0)\n-0C0258 Uncompressed Size     00000000 (0)\n-0C025C Filename Length       0069 (105)\n-0C025E Extra Length          0009 (9)\n-0C0260 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC0260: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C02C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C02CB   Length              0005 (5)\n-0C02CD   Flags               01 (1) 'Modification'\n-0C02CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C02D2 LOCAL HEADER #309     04034B50 (67324752)\n-0C02D6 Extract Zip Spec      14 (20) '2.0'\n-0C02D7 Extract OS            00 (0) 'MS-DOS'\n-0C02D8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C02DA Compression Method    0000 (0) 'Stored'\n-0C02DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C02E0 CRC                   00000000 (0)\n-0C02E4 Compressed Size       00000000 (0)\n-0C02E8 Uncompressed Size     00000000 (0)\n-0C02EC Filename Length       007F (127)\n-0C02EE Extra Length          0009 (9)\n-0C02F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC02F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C036F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C0371   Length              0005 (5)\n-0C0373   Flags               01 (1) 'Modification'\n-0C0374   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C0378 PAYLOAD\n-\n-0C0FD3 DATA DESCRIPTOR       08074B50 (134695760)\n-0C0FD7 CRC                   67FA3A91 (1744452241)\n-0C0FDB Compressed Size       00000C5B (3163)\n-0C0FDF Uncompressed Size     00000C5B (3163)\n-\n-0C0FE3 LOCAL HEADER #310     04034B50 (67324752)\n-0C0FE7 Extract Zip Spec      14 (20) '2.0'\n-0C0FE8 Extract OS            00 (0) 'MS-DOS'\n-0C0FE9 General Purpose Flag  0000 (0)\n-0C0FEB Compression Method    0000 (0) 'Stored'\n-0C0FED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C0FF1 CRC                   00000000 (0)\n-0C0FF5 Compressed Size       00000000 (0)\n-0C0FF9 Uncompressed Size     00000000 (0)\n-0C0FFD Filename Length       0069 (105)\n-0C0FFF Extra Length          0009 (9)\n-0C1001 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1001: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C106A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C106C   Length              0005 (5)\n-0C106E   Flags               01 (1) 'Modification'\n-0C106F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C1073 LOCAL HEADER #311     04034B50 (67324752)\n-0C1077 Extract Zip Spec      14 (20) '2.0'\n-0C1078 Extract OS            00 (0) 'MS-DOS'\n-0C1079 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C107B Compression Method    0000 (0) 'Stored'\n-0C107D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C1081 CRC                   00000000 (0)\n-0C1085 Compressed Size       00000000 (0)\n-0C1089 Uncompressed Size     00000000 (0)\n-0C108D Filename Length       007F (127)\n-0C108F Extra Length          0009 (9)\n-0C1091 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1091: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1110 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1112   Length              0005 (5)\n-0C1114   Flags               01 (1) 'Modification'\n-0C1115   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C1119 PAYLOAD\n-\n-0C18D9 DATA DESCRIPTOR       08074B50 (134695760)\n-0C18DD CRC                   63513D5C (1666268508)\n-0C18E1 Compressed Size       000007C0 (1984)\n-0C18E5 Uncompressed Size     000007C0 (1984)\n-\n-0C18E9 LOCAL HEADER #312     04034B50 (67324752)\n-0C18ED Extract Zip Spec      14 (20) '2.0'\n-0C18EE Extract OS            00 (0) 'MS-DOS'\n-0C18EF General Purpose Flag  0000 (0)\n-0C18F1 Compression Method    0000 (0) 'Stored'\n-0C18F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C18F7 CRC                   00000000 (0)\n-0C18FB Compressed Size       00000000 (0)\n-0C18FF Uncompressed Size     00000000 (0)\n-0C1903 Filename Length       0060 (96)\n-0C1905 Extra Length          0009 (9)\n-0C1907 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC1907: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1967 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1969   Length              0005 (5)\n-0C196B   Flags               01 (1) 'Modification'\n-0C196C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C1970 LOCAL HEADER #313     04034B50 (67324752)\n-0C1974 Extract Zip Spec      14 (20) '2.0'\n-0C1975 Extract OS            00 (0) 'MS-DOS'\n-0C1976 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C1978 Compression Method    0000 (0) 'Stored'\n-0C197A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C197E CRC                   00000000 (0)\n-0C1982 Compressed Size       00000000 (0)\n-0C1986 Uncompressed Size     00000000 (0)\n-0C198A Filename Length       0076 (118)\n-0C198C Extra Length          0009 (9)\n-0C198E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC198E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C1A04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C1A06   Length              0005 (5)\n-0C1A08   Flags               01 (1) 'Modification'\n-0C1A09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C1A0D PAYLOAD\n-\n-0C28E7 DATA DESCRIPTOR       08074B50 (134695760)\n-0C28EB CRC                   99929518 (2576520472)\n-0C28EF Compressed Size       00000EDA (3802)\n-0C28F3 Uncompressed Size     00000EDA (3802)\n-\n-0C28F7 LOCAL HEADER #314     04034B50 (67324752)\n-0C28FB Extract Zip Spec      14 (20) '2.0'\n-0C28FC Extract OS            00 (0) 'MS-DOS'\n-0C28FD General Purpose Flag  0000 (0)\n-0C28FF Compression Method    0000 (0) 'Stored'\n-0C2901 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C2905 CRC                   00000000 (0)\n-0C2909 Compressed Size       00000000 (0)\n-0C290D Uncompressed Size     00000000 (0)\n-0C2911 Filename Length       005E (94)\n-0C2913 Extra Length          0009 (9)\n-0C2915 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC2915: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2973 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2975   Length              0005 (5)\n-0C2977   Flags               01 (1) 'Modification'\n-0C2978   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C297C LOCAL HEADER #315     04034B50 (67324752)\n-0C2980 Extract Zip Spec      14 (20) '2.0'\n-0C2981 Extract OS            00 (0) 'MS-DOS'\n-0C2982 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C2984 Compression Method    0000 (0) 'Stored'\n-0C2986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C298A CRC                   00000000 (0)\n-0C298E Compressed Size       00000000 (0)\n-0C2992 Uncompressed Size     00000000 (0)\n-0C2996 Filename Length       0074 (116)\n-0C2998 Extra Length          0009 (9)\n-0C299A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC299A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C2A0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C2A10   Length              0005 (5)\n-0C2A12   Flags               01 (1) 'Modification'\n-0C2A13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C2A17 PAYLOAD\n-\n-0C330F DATA DESCRIPTOR       08074B50 (134695760)\n-0C3313 CRC                   E6BF62E0 (3871302368)\n-0C3317 Compressed Size       000008F8 (2296)\n-0C331B Uncompressed Size     000008F8 (2296)\n-\n-0C331F LOCAL HEADER #316     04034B50 (67324752)\n-0C3323 Extract Zip Spec      14 (20) '2.0'\n-0C3324 Extract OS            00 (0) 'MS-DOS'\n-0C3325 General Purpose Flag  0000 (0)\n-0C3327 Compression Method    0000 (0) 'Stored'\n-0C3329 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C332D CRC                   00000000 (0)\n-0C3331 Compressed Size       00000000 (0)\n-0C3335 Uncompressed Size     00000000 (0)\n-0C3339 Filename Length       0065 (101)\n-0C333B Extra Length          0009 (9)\n-0C333D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC333D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C33A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C33A4   Length              0005 (5)\n-0C33A6   Flags               01 (1) 'Modification'\n-0C33A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C33AB LOCAL HEADER #317     04034B50 (67324752)\n-0C33AF Extract Zip Spec      14 (20) '2.0'\n-0C33B0 Extract OS            00 (0) 'MS-DOS'\n-0C33B1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C33B3 Compression Method    0000 (0) 'Stored'\n-0C33B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C33B9 CRC                   00000000 (0)\n-0C33BD Compressed Size       00000000 (0)\n-0C33C1 Uncompressed Size     00000000 (0)\n-0C33C5 Filename Length       007B (123)\n-0C33C7 Extra Length          0009 (9)\n-0C33C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC33C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3444 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3446   Length              0005 (5)\n-0C3448   Flags               01 (1) 'Modification'\n-0C3449   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C344D PAYLOAD\n-\n-0C3C7E DATA DESCRIPTOR       08074B50 (134695760)\n-0C3C82 CRC                   F05E2331 (4032701233)\n-0C3C86 Compressed Size       00000831 (2097)\n-0C3C8A Uncompressed Size     00000831 (2097)\n-\n-0C3C8E LOCAL HEADER #318     04034B50 (67324752)\n-0C3C92 Extract Zip Spec      14 (20) '2.0'\n-0C3C93 Extract OS            00 (0) 'MS-DOS'\n-0C3C94 General Purpose Flag  0000 (0)\n-0C3C96 Compression Method    0000 (0) 'Stored'\n-0C3C98 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C3C9C CRC                   00000000 (0)\n-0C3CA0 Compressed Size       00000000 (0)\n-0C3CA4 Uncompressed Size     00000000 (0)\n-0C3CA8 Filename Length       0063 (99)\n-0C3CAA Extra Length          0009 (9)\n-0C3CAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC3CAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3D0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3D11   Length              0005 (5)\n-0C3D13   Flags               01 (1) 'Modification'\n-0C3D14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C3D18 LOCAL HEADER #319     04034B50 (67324752)\n-0C3D1C Extract Zip Spec      14 (20) '2.0'\n-0C3D1D Extract OS            00 (0) 'MS-DOS'\n-0C3D1E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C3D20 Compression Method    0000 (0) 'Stored'\n-0C3D22 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C3D26 CRC                   00000000 (0)\n-0C3D2A Compressed Size       00000000 (0)\n-0C3D2E Uncompressed Size     00000000 (0)\n-0C3D32 Filename Length       0079 (121)\n-0C3D34 Extra Length          0009 (9)\n-0C3D36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC3D36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C3DAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C3DB1   Length              0005 (5)\n-0C3DB3   Flags               01 (1) 'Modification'\n-0C3DB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C3DB8 PAYLOAD\n-\n-0C5388 DATA DESCRIPTOR       08074B50 (134695760)\n-0C538C CRC                   80ED3BA4 (2163030948)\n-0C5390 Compressed Size       000015D0 (5584)\n-0C5394 Uncompressed Size     000015D0 (5584)\n-\n-0C5398 LOCAL HEADER #320     04034B50 (67324752)\n-0C539C Extract Zip Spec      14 (20) '2.0'\n-0C539D Extract OS            00 (0) 'MS-DOS'\n-0C539E General Purpose Flag  0000 (0)\n-0C53A0 Compression Method    0000 (0) 'Stored'\n-0C53A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C53A6 CRC                   00000000 (0)\n-0C53AA Compressed Size       00000000 (0)\n-0C53AE Uncompressed Size     00000000 (0)\n-0C53B2 Filename Length       0069 (105)\n-0C53B4 Extra Length          0009 (9)\n-0C53B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC53B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C541F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C5421   Length              0005 (5)\n-0C5423   Flags               01 (1) 'Modification'\n-0C5424   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C5428 LOCAL HEADER #321     04034B50 (67324752)\n-0C542C Extract Zip Spec      14 (20) '2.0'\n-0C542D Extract OS            00 (0) 'MS-DOS'\n-0C542E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C5430 Compression Method    0000 (0) 'Stored'\n-0C5432 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C5436 CRC                   00000000 (0)\n-0C543A Compressed Size       00000000 (0)\n-0C543E Uncompressed Size     00000000 (0)\n-0C5442 Filename Length       007F (127)\n-0C5444 Extra Length          0009 (9)\n-0C5446 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC5446: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C54C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C54C7   Length              0005 (5)\n-0C54C9   Flags               01 (1) 'Modification'\n-0C54CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C54CE PAYLOAD\n-\n-0C747C DATA DESCRIPTOR       08074B50 (134695760)\n-0C7480 CRC                   7018E446 (1880679494)\n-0C7484 Compressed Size       00001FAE (8110)\n-0C7488 Uncompressed Size     00001FAE (8110)\n-\n-0C748C LOCAL HEADER #322     04034B50 (67324752)\n-0C7490 Extract Zip Spec      14 (20) '2.0'\n-0C7491 Extract OS            00 (0) 'MS-DOS'\n-0C7492 General Purpose Flag  0000 (0)\n-0C7494 Compression Method    0000 (0) 'Stored'\n-0C7496 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C749A CRC                   00000000 (0)\n-0C749E Compressed Size       00000000 (0)\n-0C74A2 Uncompressed Size     00000000 (0)\n-0C74A6 Filename Length       0060 (96)\n-0C74A8 Extra Length          0009 (9)\n-0C74AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC74AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C750A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C750C   Length              0005 (5)\n-0C750E   Flags               01 (1) 'Modification'\n-0C750F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C7513 LOCAL HEADER #323     04034B50 (67324752)\n-0C7517 Extract Zip Spec      14 (20) '2.0'\n-0C7518 Extract OS            00 (0) 'MS-DOS'\n-0C7519 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C751B Compression Method    0000 (0) 'Stored'\n-0C751D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C7521 CRC                   00000000 (0)\n-0C7525 Compressed Size       00000000 (0)\n-0C7529 Uncompressed Size     00000000 (0)\n-0C752D Filename Length       0076 (118)\n-0C752F Extra Length          0009 (9)\n-0C7531 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC7531: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C75A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C75A9   Length              0005 (5)\n-0C75AB   Flags               01 (1) 'Modification'\n-0C75AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C75B0 PAYLOAD\n-\n-0C88AA DATA DESCRIPTOR       08074B50 (134695760)\n-0C88AE CRC                   61A0CE5A (1637928538)\n-0C88B2 Compressed Size       000012FA (4858)\n-0C88B6 Uncompressed Size     000012FA (4858)\n-\n-0C88BA LOCAL HEADER #324     04034B50 (67324752)\n-0C88BE Extract Zip Spec      14 (20) '2.0'\n-0C88BF Extract OS            00 (0) 'MS-DOS'\n-0C88C0 General Purpose Flag  0000 (0)\n-0C88C2 Compression Method    0000 (0) 'Stored'\n-0C88C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C88C8 CRC                   00000000 (0)\n-0C88CC Compressed Size       00000000 (0)\n-0C88D0 Uncompressed Size     00000000 (0)\n-0C88D4 Filename Length       0063 (99)\n-0C88D6 Extra Length          0009 (9)\n-0C88D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC88D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C893B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C893D   Length              0005 (5)\n-0C893F   Flags               01 (1) 'Modification'\n-0C8940   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C8944 LOCAL HEADER #325     04034B50 (67324752)\n-0C8948 Extract Zip Spec      14 (20) '2.0'\n-0C8949 Extract OS            00 (0) 'MS-DOS'\n-0C894A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C894C Compression Method    0000 (0) 'Stored'\n-0C894E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C8952 CRC                   00000000 (0)\n-0C8956 Compressed Size       00000000 (0)\n-0C895A Uncompressed Size     00000000 (0)\n-0C895E Filename Length       0079 (121)\n-0C8960 Extra Length          0009 (9)\n-0C8962 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC8962: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C89DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C89DD   Length              0005 (5)\n-0C89DF   Flags               01 (1) 'Modification'\n-0C89E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C89E4 PAYLOAD\n-\n-0C9CF5 DATA DESCRIPTOR       08074B50 (134695760)\n-0C9CF9 CRC                   5A804AEF (1518357231)\n-0C9CFD Compressed Size       00001311 (4881)\n-0C9D01 Uncompressed Size     00001311 (4881)\n-\n-0C9D05 LOCAL HEADER #326     04034B50 (67324752)\n-0C9D09 Extract Zip Spec      14 (20) '2.0'\n-0C9D0A Extract OS            00 (0) 'MS-DOS'\n-0C9D0B General Purpose Flag  0000 (0)\n-0C9D0D Compression Method    0000 (0) 'Stored'\n-0C9D0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9D13 CRC                   00000000 (0)\n-0C9D17 Compressed Size       00000000 (0)\n-0C9D1B Uncompressed Size     00000000 (0)\n-0C9D1F Filename Length       005F (95)\n-0C9D21 Extra Length          0009 (9)\n-0C9D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC9D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C9D82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C9D84   Length              0005 (5)\n-0C9D86   Flags               01 (1) 'Modification'\n-0C9D87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0C9D8B LOCAL HEADER #327     04034B50 (67324752)\n-0C9D8F Extract Zip Spec      14 (20) '2.0'\n-0C9D90 Extract OS            00 (0) 'MS-DOS'\n-0C9D91 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0C9D93 Compression Method    0000 (0) 'Stored'\n-0C9D95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C9D99 CRC                   00000000 (0)\n-0C9D9D Compressed Size       00000000 (0)\n-0C9DA1 Uncompressed Size     00000000 (0)\n-0C9DA5 Filename Length       0075 (117)\n-0C9DA7 Extra Length          0009 (9)\n-0C9DA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC9DA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C9E1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C9E20   Length              0005 (5)\n-0C9E22   Flags               01 (1) 'Modification'\n-0C9E23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C9E27 PAYLOAD\n-\n-0CC60B DATA DESCRIPTOR       08074B50 (134695760)\n-0CC60F CRC                   F4A07CA3 (4104158371)\n-0CC613 Compressed Size       000027E4 (10212)\n-0CC617 Uncompressed Size     000027E4 (10212)\n-\n-0CC61B LOCAL HEADER #328     04034B50 (67324752)\n-0CC61F Extract Zip Spec      14 (20) '2.0'\n-0CC620 Extract OS            00 (0) 'MS-DOS'\n-0CC621 General Purpose Flag  0000 (0)\n-0CC623 Compression Method    0000 (0) 'Stored'\n-0CC625 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC629 CRC                   00000000 (0)\n-0CC62D Compressed Size       00000000 (0)\n-0CC631 Uncompressed Size     00000000 (0)\n-0CC635 Filename Length       0067 (103)\n-0CC637 Extra Length          0009 (9)\n-0CC639 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC639: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC6A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC6A2   Length              0005 (5)\n-0CC6A4   Flags               01 (1) 'Modification'\n-0CC6A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CC6A9 LOCAL HEADER #329     04034B50 (67324752)\n-0CC6AD Extract Zip Spec      14 (20) '2.0'\n-0CC6AE Extract OS            00 (0) 'MS-DOS'\n-0CC6AF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CC6B1 Compression Method    0000 (0) 'Stored'\n-0CC6B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC6B7 CRC                   00000000 (0)\n-0CC6BB Compressed Size       00000000 (0)\n-0CC6BF Uncompressed Size     00000000 (0)\n-0CC6C3 Filename Length       007D (125)\n-0CC6C5 Extra Length          0009 (9)\n-0CC6C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC6C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC744 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC746   Length              0005 (5)\n-0CC748   Flags               01 (1) 'Modification'\n-0CC749   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CC74D PAYLOAD\n-\n-0CD9C3 DATA DESCRIPTOR       08074B50 (134695760)\n-0CD9C7 CRC                   6E031E40 (1845698112)\n-0CD9CB Compressed Size       00001276 (4726)\n-0CD9CF Uncompressed Size     00001276 (4726)\n-\n-0CD9D3 LOCAL HEADER #330     04034B50 (67324752)\n-0CD9D7 Extract Zip Spec      14 (20) '2.0'\n-0CD9D8 Extract OS            00 (0) 'MS-DOS'\n-0CD9D9 General Purpose Flag  0000 (0)\n-0CD9DB Compression Method    0000 (0) 'Stored'\n-0CD9DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CD9E1 CRC                   00000000 (0)\n-0CD9E5 Compressed Size       00000000 (0)\n-0CD9E9 Uncompressed Size     00000000 (0)\n-0CD9ED Filename Length       0066 (102)\n-0CD9EF Extra Length          0009 (9)\n-0CD9F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCD9F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDA57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDA59   Length              0005 (5)\n-0CDA5B   Flags               01 (1) 'Modification'\n-0CDA5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CDA60 LOCAL HEADER #331     04034B50 (67324752)\n-0CDA64 Extract Zip Spec      14 (20) '2.0'\n-0CDA65 Extract OS            00 (0) 'MS-DOS'\n-0CDA66 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CDA68 Compression Method    0000 (0) 'Stored'\n-0CDA6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CDA6E CRC                   00000000 (0)\n-0CDA72 Compressed Size       00000000 (0)\n-0CDA76 Uncompressed Size     00000000 (0)\n-0CDA7A Filename Length       007C (124)\n-0CDA7C Extra Length          0009 (9)\n-0CDA7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCDA7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CDAFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CDAFC   Length              0005 (5)\n-0CDAFE   Flags               01 (1) 'Modification'\n-0CDAFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CDB03 PAYLOAD\n-\n-0CE6E1 DATA DESCRIPTOR       08074B50 (134695760)\n-0CE6E5 CRC                   5987930A (1502057226)\n-0CE6E9 Compressed Size       00000BDE (3038)\n-0CE6ED Uncompressed Size     00000BDE (3038)\n-\n-0CE6F1 LOCAL HEADER #332     04034B50 (67324752)\n-0CE6F5 Extract Zip Spec      14 (20) '2.0'\n-0CE6F6 Extract OS            00 (0) 'MS-DOS'\n-0CE6F7 General Purpose Flag  0000 (0)\n-0CE6F9 Compression Method    0000 (0) 'Stored'\n-0CE6FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CE6FF CRC                   00000000 (0)\n-0CE703 Compressed Size       00000000 (0)\n-0CE707 Uncompressed Size     00000000 (0)\n-0CE70B Filename Length       0067 (103)\n-0CE70D Extra Length          0009 (9)\n-0CE70F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE70F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CE776 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CE778   Length              0005 (5)\n-0CE77A   Flags               01 (1) 'Modification'\n-0CE77B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CE77F LOCAL HEADER #333     04034B50 (67324752)\n-0CE783 Extract Zip Spec      14 (20) '2.0'\n-0CE784 Extract OS            00 (0) 'MS-DOS'\n-0CE785 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CE787 Compression Method    0000 (0) 'Stored'\n-0CE789 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CE78D CRC                   00000000 (0)\n-0CE791 Compressed Size       00000000 (0)\n-0CE795 Uncompressed Size     00000000 (0)\n-0CE799 Filename Length       007D (125)\n-0CE79B Extra Length          0009 (9)\n-0CE79D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE79D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CE81A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CE81C   Length              0005 (5)\n-0CE81E   Flags               01 (1) 'Modification'\n-0CE81F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CE823 PAYLOAD\n-\n-0CF0F2 DATA DESCRIPTOR       08074B50 (134695760)\n-0CF0F6 CRC                   CA93F7B9 (3398694841)\n-0CF0FA Compressed Size       000008CF (2255)\n-0CF0FE Uncompressed Size     000008CF (2255)\n-\n-0CF102 LOCAL HEADER #334     04034B50 (67324752)\n-0CF106 Extract Zip Spec      14 (20) '2.0'\n-0CF107 Extract OS            00 (0) 'MS-DOS'\n-0CF108 General Purpose Flag  0000 (0)\n-0CF10A Compression Method    0000 (0) 'Stored'\n-0CF10C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF110 CRC                   00000000 (0)\n-0CF114 Compressed Size       00000000 (0)\n-0CF118 Uncompressed Size     00000000 (0)\n-0CF11C Filename Length       0065 (101)\n-0CF11E Extra Length          0009 (9)\n-0CF120 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF120: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF187   Length              0005 (5)\n-0CF189   Flags               01 (1) 'Modification'\n-0CF18A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CF18E LOCAL HEADER #335     04034B50 (67324752)\n-0CF192 Extract Zip Spec      14 (20) '2.0'\n-0CF193 Extract OS            00 (0) 'MS-DOS'\n-0CF194 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CF196 Compression Method    0000 (0) 'Stored'\n-0CF198 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CF19C CRC                   00000000 (0)\n-0CF1A0 Compressed Size       00000000 (0)\n-0CF1A4 Uncompressed Size     00000000 (0)\n-0CF1A8 Filename Length       007B (123)\n-0CF1AA Extra Length          0009 (9)\n-0CF1AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF1AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CF227 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CF229   Length              0005 (5)\n-0CF22B   Flags               01 (1) 'Modification'\n-0CF22C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CF230 PAYLOAD\n-\n-0CFED9 DATA DESCRIPTOR       08074B50 (134695760)\n-0CFEDD CRC                   673E5975 (1732139381)\n-0CFEE1 Compressed Size       00000CA9 (3241)\n-0CFEE5 Uncompressed Size     00000CA9 (3241)\n-\n-0CFEE9 LOCAL HEADER #336     04034B50 (67324752)\n-0CFEED Extract Zip Spec      14 (20) '2.0'\n-0CFEEE Extract OS            00 (0) 'MS-DOS'\n-0CFEEF General Purpose Flag  0000 (0)\n-0CFEF1 Compression Method    0000 (0) 'Stored'\n-0CFEF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CFEF7 CRC                   00000000 (0)\n-0CFEFB Compressed Size       00000000 (0)\n-0CFEFF Uncompressed Size     00000000 (0)\n-0CFF03 Filename Length       0063 (99)\n-0CFF05 Extra Length          0009 (9)\n-0CFF07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCFF07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CFF6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CFF6C   Length              0005 (5)\n-0CFF6E   Flags               01 (1) 'Modification'\n-0CFF6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0CFF73 LOCAL HEADER #337     04034B50 (67324752)\n-0CFF77 Extract Zip Spec      14 (20) '2.0'\n-0CFF78 Extract OS            00 (0) 'MS-DOS'\n-0CFF79 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0CFF7B Compression Method    0000 (0) 'Stored'\n-0CFF7D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CFF81 CRC                   00000000 (0)\n-0CFF85 Compressed Size       00000000 (0)\n-0CFF89 Uncompressed Size     00000000 (0)\n-0CFF8D Filename Length       0079 (121)\n-0CFF8F Extra Length          0009 (9)\n-0CFF91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCFF91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D000A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D000C   Length              0005 (5)\n-0D000E   Flags               01 (1) 'Modification'\n-0D000F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D0013 PAYLOAD\n-\n-0D504B DATA DESCRIPTOR       08074B50 (134695760)\n-0D504F CRC                   2D1E752C (756970796)\n-0D5053 Compressed Size       00005038 (20536)\n-0D5057 Uncompressed Size     00005038 (20536)\n-\n-0D505B LOCAL HEADER #338     04034B50 (67324752)\n-0D505F Extract Zip Spec      14 (20) '2.0'\n-0D5060 Extract OS            00 (0) 'MS-DOS'\n-0D5061 General Purpose Flag  0000 (0)\n-0D5063 Compression Method    0000 (0) 'Stored'\n-0D5065 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5069 CRC                   00000000 (0)\n-0D506D Compressed Size       00000000 (0)\n-0D5071 Uncompressed Size     00000000 (0)\n-0D5075 Filename Length       005C (92)\n-0D5077 Extra Length          0009 (9)\n-0D5079 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5079: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D50D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D50D7   Length              0005 (5)\n-0D50D9   Flags               01 (1) 'Modification'\n-0D50DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D50DE LOCAL HEADER #339     04034B50 (67324752)\n-0D50E2 Extract Zip Spec      14 (20) '2.0'\n-0D50E3 Extract OS            00 (0) 'MS-DOS'\n-0D50E4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D50E6 Compression Method    0000 (0) 'Stored'\n-0D50E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D50EC CRC                   00000000 (0)\n-0D50F0 Compressed Size       00000000 (0)\n-0D50F4 Uncompressed Size     00000000 (0)\n-0D50F8 Filename Length       0072 (114)\n-0D50FA Extra Length          0009 (9)\n-0D50FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD50FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D516E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D5170   Length              0005 (5)\n-0D5172   Flags               01 (1) 'Modification'\n-0D5173   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D5177 PAYLOAD\n-\n-0D6BFC DATA DESCRIPTOR       08074B50 (134695760)\n-0D6C00 CRC                   DB187B38 (3675814712)\n-0D6C04 Compressed Size       00001A85 (6789)\n-0D6C08 Uncompressed Size     00001A85 (6789)\n-\n-0D6C0C LOCAL HEADER #340     04034B50 (67324752)\n-0D6C10 Extract Zip Spec      14 (20) '2.0'\n-0D6C11 Extract OS            00 (0) 'MS-DOS'\n-0D6C12 General Purpose Flag  0000 (0)\n-0D6C14 Compression Method    0000 (0) 'Stored'\n-0D6C16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D6C1A CRC                   00000000 (0)\n-0D6C1E Compressed Size       00000000 (0)\n-0D6C22 Uncompressed Size     00000000 (0)\n-0D6C26 Filename Length       005D (93)\n-0D6C28 Extra Length          0009 (9)\n-0D6C2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD6C2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D6C87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6C89   Length              0005 (5)\n-0D6C8B   Flags               01 (1) 'Modification'\n-0D6C8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D6C90 LOCAL HEADER #341     04034B50 (67324752)\n-0D6C94 Extract Zip Spec      14 (20) '2.0'\n-0D6C95 Extract OS            00 (0) 'MS-DOS'\n-0D6C96 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D6C98 Compression Method    0000 (0) 'Stored'\n-0D6C9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D6C9E CRC                   00000000 (0)\n-0D6CA2 Compressed Size       00000000 (0)\n-0D6CA6 Uncompressed Size     00000000 (0)\n-0D6CAA Filename Length       0073 (115)\n-0D6CAC Extra Length          0009 (9)\n-0D6CAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD6CAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D6D21 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6D23   Length              0005 (5)\n-0D6D25   Flags               01 (1) 'Modification'\n-0D6D26   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D6D2A PAYLOAD\n-\n-0D8798 DATA DESCRIPTOR       08074B50 (134695760)\n-0D879C CRC                   CD183667 (3440916071)\n-0D87A0 Compressed Size       00001A6E (6766)\n-0D87A4 Uncompressed Size     00001A6E (6766)\n-\n-0D87A8 LOCAL HEADER #342     04034B50 (67324752)\n-0D87AC Extract Zip Spec      14 (20) '2.0'\n-0D87AD Extract OS            00 (0) 'MS-DOS'\n-0D87AE General Purpose Flag  0000 (0)\n-0D87B0 Compression Method    0000 (0) 'Stored'\n-0D87B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D87B6 CRC                   00000000 (0)\n-0D87BA Compressed Size       00000000 (0)\n-0D87BE Uncompressed Size     00000000 (0)\n-0D87C2 Filename Length       005D (93)\n-0D87C4 Extra Length          0009 (9)\n-0D87C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD87C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D8823 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D8825   Length              0005 (5)\n-0D8827   Flags               01 (1) 'Modification'\n-0D8828   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0D882C LOCAL HEADER #343     04034B50 (67324752)\n-0D8830 Extract Zip Spec      14 (20) '2.0'\n-0D8831 Extract OS            00 (0) 'MS-DOS'\n-0D8832 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0D8834 Compression Method    0000 (0) 'Stored'\n-0D8836 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D883A CRC                   00000000 (0)\n-0D883E Compressed Size       00000000 (0)\n-0D8842 Uncompressed Size     00000000 (0)\n-0D8846 Filename Length       0073 (115)\n-0D8848 Extra Length          0009 (9)\n-0D884A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD884A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D88BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D88BF   Length              0005 (5)\n-0D88C1   Flags               01 (1) 'Modification'\n-0D88C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D88C6 PAYLOAD\n-\n-0DA358 DATA DESCRIPTOR       08074B50 (134695760)\n-0DA35C CRC                   0C7DD276 (209572470)\n-0DA360 Compressed Size       00001A92 (6802)\n-0DA364 Uncompressed Size     00001A92 (6802)\n-\n-0DA368 LOCAL HEADER #344     04034B50 (67324752)\n-0DA36C Extract Zip Spec      14 (20) '2.0'\n-0DA36D Extract OS            00 (0) 'MS-DOS'\n-0DA36E General Purpose Flag  0000 (0)\n-0DA370 Compression Method    0000 (0) 'Stored'\n-0DA372 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DA376 CRC                   00000000 (0)\n-0DA37A Compressed Size       00000000 (0)\n-0DA37E Uncompressed Size     00000000 (0)\n-0DA382 Filename Length       005E (94)\n-0DA384 Extra Length          0009 (9)\n-0DA386 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDA386: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DA3E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DA3E6   Length              0005 (5)\n-0DA3E8   Flags               01 (1) 'Modification'\n-0DA3E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DA3ED LOCAL HEADER #345     04034B50 (67324752)\n-0DA3F1 Extract Zip Spec      14 (20) '2.0'\n-0DA3F2 Extract OS            00 (0) 'MS-DOS'\n-0DA3F3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DA3F5 Compression Method    0000 (0) 'Stored'\n-0DA3F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DA3FB CRC                   00000000 (0)\n-0DA3FF Compressed Size       00000000 (0)\n-0DA403 Uncompressed Size     00000000 (0)\n-0DA407 Filename Length       0074 (116)\n-0DA409 Extra Length          0009 (9)\n-0DA40B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDA40B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DA47F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DA481   Length              0005 (5)\n-0DA483   Flags               01 (1) 'Modification'\n-0DA484   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DA488 PAYLOAD\n-\n-0DBBBB DATA DESCRIPTOR       08074B50 (134695760)\n-0DBBBF CRC                   60EA12C2 (1625952962)\n-0DBBC3 Compressed Size       00001733 (5939)\n-0DBBC7 Uncompressed Size     00001733 (5939)\n-\n-0DBBCB LOCAL HEADER #346     04034B50 (67324752)\n-0DBBCF Extract Zip Spec      14 (20) '2.0'\n-0DBBD0 Extract OS            00 (0) 'MS-DOS'\n-0DBBD1 General Purpose Flag  0000 (0)\n-0DBBD3 Compression Method    0000 (0) 'Stored'\n-0DBBD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DBBD9 CRC                   00000000 (0)\n-0DBBDD Compressed Size       00000000 (0)\n-0DBBE1 Uncompressed Size     00000000 (0)\n-0DBBE5 Filename Length       0061 (97)\n-0DBBE7 Extra Length          0009 (9)\n-0DBBE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDBBE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DBC4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DBC4C   Length              0005 (5)\n-0DBC4E   Flags               01 (1) 'Modification'\n-0DBC4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DBC53 LOCAL HEADER #347     04034B50 (67324752)\n-0DBC57 Extract Zip Spec      14 (20) '2.0'\n-0DBC58 Extract OS            00 (0) 'MS-DOS'\n-0DBC59 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DBC5B Compression Method    0000 (0) 'Stored'\n-0DBC5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DBC61 CRC                   00000000 (0)\n-0DBC65 Compressed Size       00000000 (0)\n-0DBC69 Uncompressed Size     00000000 (0)\n-0DBC6D Filename Length       0077 (119)\n-0DBC6F Extra Length          0009 (9)\n-0DBC71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDBC71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DBCE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DBCEA   Length              0005 (5)\n-0DBCEC   Flags               01 (1) 'Modification'\n-0DBCED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DBCF1 PAYLOAD\n-\n-0DD36E DATA DESCRIPTOR       08074B50 (134695760)\n-0DD372 CRC                   4BB1EABD (1269951165)\n-0DD376 Compressed Size       0000167D (5757)\n-0DD37A Uncompressed Size     0000167D (5757)\n-\n-0DD37E LOCAL HEADER #348     04034B50 (67324752)\n-0DD382 Extract Zip Spec      14 (20) '2.0'\n-0DD383 Extract OS            00 (0) 'MS-DOS'\n-0DD384 General Purpose Flag  0000 (0)\n-0DD386 Compression Method    0000 (0) 'Stored'\n-0DD388 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD38C CRC                   00000000 (0)\n-0DD390 Compressed Size       00000000 (0)\n-0DD394 Uncompressed Size     00000000 (0)\n-0DD398 Filename Length       0061 (97)\n-0DD39A Extra Length          0009 (9)\n-0DD39C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD39C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DD3FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DD3FF   Length              0005 (5)\n-0DD401   Flags               01 (1) 'Modification'\n-0DD402   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0DD406 LOCAL HEADER #349     04034B50 (67324752)\n-0DD40A Extract Zip Spec      14 (20) '2.0'\n-0DD40B Extract OS            00 (0) 'MS-DOS'\n-0DD40C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0DD40E Compression Method    0000 (0) 'Stored'\n-0DD410 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD414 CRC                   00000000 (0)\n-0DD418 Compressed Size       00000000 (0)\n-0DD41C Uncompressed Size     00000000 (0)\n-0DD420 Filename Length       0077 (119)\n-0DD422 Extra Length          0009 (9)\n-0DD424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DD49B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DD49D   Length              0005 (5)\n-0DD49F   Flags               01 (1) 'Modification'\n-0DD4A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DD4A4 PAYLOAD\n-\n-0E072E DATA DESCRIPTOR       08074B50 (134695760)\n-0E0732 CRC                   A18A8EB9 (2710212281)\n-0E0736 Compressed Size       0000328A (12938)\n-0E073A Uncompressed Size     0000328A (12938)\n-\n-0E073E LOCAL HEADER #350     04034B50 (67324752)\n-0E0742 Extract Zip Spec      14 (20) '2.0'\n-0E0743 Extract OS            00 (0) 'MS-DOS'\n-0E0744 General Purpose Flag  0000 (0)\n-0E0746 Compression Method    0000 (0) 'Stored'\n-0E0748 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E074C CRC                   00000000 (0)\n-0E0750 Compressed Size       00000000 (0)\n-0E0754 Uncompressed Size     00000000 (0)\n-0E0758 Filename Length       0060 (96)\n-0E075A Extra Length          0009 (9)\n-0E075C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE075C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E07BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E07BE   Length              0005 (5)\n-0E07C0   Flags               01 (1) 'Modification'\n-0E07C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E07C5 LOCAL HEADER #351     04034B50 (67324752)\n-0E07C9 Extract Zip Spec      14 (20) '2.0'\n-0E07CA Extract OS            00 (0) 'MS-DOS'\n-0E07CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E07CD Compression Method    0000 (0) 'Stored'\n-0E07CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E07D3 CRC                   00000000 (0)\n-0E07D7 Compressed Size       00000000 (0)\n-0E07DB Uncompressed Size     00000000 (0)\n-0E07DF Filename Length       0076 (118)\n-0E07E1 Extra Length          0009 (9)\n-0E07E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE07E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E0859 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E085B   Length              0005 (5)\n-0E085D   Flags               01 (1) 'Modification'\n-0E085E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E0862 PAYLOAD\n-\n-0E40DB DATA DESCRIPTOR       08074B50 (134695760)\n-0E40DF CRC                   B7B762D6 (3082248918)\n-0E40E3 Compressed Size       00003879 (14457)\n-0E40E7 Uncompressed Size     00003879 (14457)\n-\n-0E40EB LOCAL HEADER #352     04034B50 (67324752)\n-0E40EF Extract Zip Spec      14 (20) '2.0'\n-0E40F0 Extract OS            00 (0) 'MS-DOS'\n-0E40F1 General Purpose Flag  0000 (0)\n-0E40F3 Compression Method    0000 (0) 'Stored'\n-0E40F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E40F9 CRC                   00000000 (0)\n-0E40FD Compressed Size       00000000 (0)\n-0E4101 Uncompressed Size     00000000 (0)\n-0E4105 Filename Length       0064 (100)\n-0E4107 Extra Length          0009 (9)\n-0E4109 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE4109: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E416D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E416F   Length              0005 (5)\n-0E4171   Flags               01 (1) 'Modification'\n-0E4172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E4176 LOCAL HEADER #353     04034B50 (67324752)\n-0E417A Extract Zip Spec      14 (20) '2.0'\n-0E417B Extract OS            00 (0) 'MS-DOS'\n-0E417C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E417E Compression Method    0000 (0) 'Stored'\n-0E4180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E4184 CRC                   00000000 (0)\n-0E4188 Compressed Size       00000000 (0)\n-0E418C Uncompressed Size     00000000 (0)\n-0E4190 Filename Length       007A (122)\n-0E4192 Extra Length          0009 (9)\n-0E4194 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE4194: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E420E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E4210   Length              0005 (5)\n-0E4212   Flags               01 (1) 'Modification'\n-0E4213   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E4217 PAYLOAD\n-\n-0E6367 DATA DESCRIPTOR       08074B50 (134695760)\n-0E636B CRC                   A2B9D29A (2730087066)\n-0E636F Compressed Size       00002150 (8528)\n-0E6373 Uncompressed Size     00002150 (8528)\n-\n-0E6377 LOCAL HEADER #354     04034B50 (67324752)\n-0E637B Extract Zip Spec      14 (20) '2.0'\n-0E637C Extract OS            00 (0) 'MS-DOS'\n-0E637D General Purpose Flag  0000 (0)\n-0E637F Compression Method    0000 (0) 'Stored'\n-0E6381 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6385 CRC                   00000000 (0)\n-0E6389 Compressed Size       00000000 (0)\n-0E638D Uncompressed Size     00000000 (0)\n-0E6391 Filename Length       005D (93)\n-0E6393 Extra Length          0009 (9)\n-0E6395 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6395: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E63F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E63F4   Length              0005 (5)\n-0E63F6   Flags               01 (1) 'Modification'\n-0E63F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E63FB LOCAL HEADER #355     04034B50 (67324752)\n-0E63FF Extract Zip Spec      14 (20) '2.0'\n-0E6400 Extract OS            00 (0) 'MS-DOS'\n-0E6401 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E6403 Compression Method    0000 (0) 'Stored'\n-0E6405 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E6409 CRC                   00000000 (0)\n-0E640D Compressed Size       00000000 (0)\n-0E6411 Uncompressed Size     00000000 (0)\n-0E6415 Filename Length       0073 (115)\n-0E6417 Extra Length          0009 (9)\n-0E6419 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE6419: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E648C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E648E   Length              0005 (5)\n-0E6490   Flags               01 (1) 'Modification'\n-0E6491   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E6495 PAYLOAD\n-\n-0E7671 DATA DESCRIPTOR       08074B50 (134695760)\n-0E7675 CRC                   C4FC7EA2 (3304881826)\n-0E7679 Compressed Size       000011DC (4572)\n-0E767D Uncompressed Size     000011DC (4572)\n-\n-0E7681 LOCAL HEADER #356     04034B50 (67324752)\n-0E7685 Extract Zip Spec      14 (20) '2.0'\n-0E7686 Extract OS            00 (0) 'MS-DOS'\n-0E7687 General Purpose Flag  0000 (0)\n-0E7689 Compression Method    0000 (0) 'Stored'\n-0E768B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E768F CRC                   00000000 (0)\n-0E7693 Compressed Size       00000000 (0)\n-0E7697 Uncompressed Size     00000000 (0)\n-0E769B Filename Length       0060 (96)\n-0E769D Extra Length          0009 (9)\n-0E769F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE769F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E76FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E7701   Length              0005 (5)\n-0E7703   Flags               01 (1) 'Modification'\n-0E7704   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0E7708 LOCAL HEADER #357     04034B50 (67324752)\n-0E770C Extract Zip Spec      14 (20) '2.0'\n-0E770D Extract OS            00 (0) 'MS-DOS'\n-0E770E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0E7710 Compression Method    0000 (0) 'Stored'\n-0E7712 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E7716 CRC                   00000000 (0)\n-0E771A Compressed Size       00000000 (0)\n-0E771E Uncompressed Size     00000000 (0)\n-0E7722 Filename Length       0076 (118)\n-0E7724 Extra Length          0009 (9)\n-0E7726 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE7726: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E779C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E779E   Length              0005 (5)\n-0E77A0   Flags               01 (1) 'Modification'\n-0E77A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E77A5 PAYLOAD\n-\n-0EEAA0 DATA DESCRIPTOR       08074B50 (134695760)\n-0EEAA4 CRC                   EE30A8D8 (3996166360)\n-0EEAA8 Compressed Size       000072FB (29435)\n-0EEAAC Uncompressed Size     000072FB (29435)\n-\n-0EEAB0 LOCAL HEADER #358     04034B50 (67324752)\n-0EEAB4 Extract Zip Spec      14 (20) '2.0'\n-0EEAB5 Extract OS            00 (0) 'MS-DOS'\n-0EEAB6 General Purpose Flag  0000 (0)\n-0EEAB8 Compression Method    0000 (0) 'Stored'\n-0EEABA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EEABE CRC                   00000000 (0)\n-0EEAC2 Compressed Size       00000000 (0)\n-0EEAC6 Uncompressed Size     00000000 (0)\n-0EEACA Filename Length       0066 (102)\n-0EEACC Extra Length          0009 (9)\n-0EEACE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEEACE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EEB34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EEB36   Length              0005 (5)\n-0EEB38   Flags               01 (1) 'Modification'\n-0EEB39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0EEB3D LOCAL HEADER #359     04034B50 (67324752)\n-0EEB41 Extract Zip Spec      14 (20) '2.0'\n-0EEB42 Extract OS            00 (0) 'MS-DOS'\n-0EEB43 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0EEB45 Compression Method    0000 (0) 'Stored'\n-0EEB47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EEB4B CRC                   00000000 (0)\n-0EEB4F Compressed Size       00000000 (0)\n-0EEB53 Uncompressed Size     00000000 (0)\n-0EEB57 Filename Length       007C (124)\n-0EEB59 Extra Length          0009 (9)\n-0EEB5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEEB5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EEBD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EEBD9   Length              0005 (5)\n-0EEBDB   Flags               01 (1) 'Modification'\n-0EEBDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EEBE0 PAYLOAD\n-\n-0F33EE DATA DESCRIPTOR       08074B50 (134695760)\n-0F33F2 CRC                   EA36353C (3929421116)\n-0F33F6 Compressed Size       0000480E (18446)\n-0F33FA Uncompressed Size     0000480E (18446)\n-\n-0F33FE LOCAL HEADER #360     04034B50 (67324752)\n-0F3402 Extract Zip Spec      14 (20) '2.0'\n-0F3403 Extract OS            00 (0) 'MS-DOS'\n-0F3404 General Purpose Flag  0000 (0)\n-0F3406 Compression Method    0000 (0) 'Stored'\n-0F3408 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F340C CRC                   00000000 (0)\n-0F3410 Compressed Size       00000000 (0)\n-0F3414 Uncompressed Size     00000000 (0)\n-0F3418 Filename Length       0065 (101)\n-0F341A Extra Length          0009 (9)\n-0F341C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF341C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3481 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3483   Length              0005 (5)\n-0F3485   Flags               01 (1) 'Modification'\n-0F3486   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F348A LOCAL HEADER #361     04034B50 (67324752)\n-0F348E Extract Zip Spec      14 (20) '2.0'\n-0F348F Extract OS            00 (0) 'MS-DOS'\n-0F3490 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F3492 Compression Method    0000 (0) 'Stored'\n-0F3494 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3498 CRC                   00000000 (0)\n-0F349C Compressed Size       00000000 (0)\n-0F34A0 Uncompressed Size     00000000 (0)\n-0F34A4 Filename Length       007B (123)\n-0F34A6 Extra Length          0009 (9)\n-0F34A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF34A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3523 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3525   Length              0005 (5)\n-0F3527   Flags               01 (1) 'Modification'\n-0F3528   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F352C PAYLOAD\n-\n-0F3CE2 DATA DESCRIPTOR       08074B50 (134695760)\n-0F3CE6 CRC                   CA474DE0 (3393670624)\n-0F3CEA Compressed Size       000007B6 (1974)\n-0F3CEE Uncompressed Size     000007B6 (1974)\n-\n-0F3CF2 LOCAL HEADER #362     04034B50 (67324752)\n-0F3CF6 Extract Zip Spec      14 (20) '2.0'\n-0F3CF7 Extract OS            00 (0) 'MS-DOS'\n-0F3CF8 General Purpose Flag  0000 (0)\n-0F3CFA Compression Method    0000 (0) 'Stored'\n-0F3CFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3D00 CRC                   00000000 (0)\n-0F3D04 Compressed Size       00000000 (0)\n-0F3D08 Uncompressed Size     00000000 (0)\n-0F3D0C Filename Length       0061 (97)\n-0F3D0E Extra Length          0009 (9)\n-0F3D10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF3D10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3D71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3D73   Length              0005 (5)\n-0F3D75   Flags               01 (1) 'Modification'\n-0F3D76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F3D7A LOCAL HEADER #363     04034B50 (67324752)\n-0F3D7E Extract Zip Spec      14 (20) '2.0'\n-0F3D7F Extract OS            00 (0) 'MS-DOS'\n-0F3D80 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F3D82 Compression Method    0000 (0) 'Stored'\n-0F3D84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F3D88 CRC                   00000000 (0)\n-0F3D8C Compressed Size       00000000 (0)\n-0F3D90 Uncompressed Size     00000000 (0)\n-0F3D94 Filename Length       0077 (119)\n-0F3D96 Extra Length          0009 (9)\n-0F3D98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF3D98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F3E0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F3E11   Length              0005 (5)\n-0F3E13   Flags               01 (1) 'Modification'\n-0F3E14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F3E18 PAYLOAD\n-\n-0F4FE3 DATA DESCRIPTOR       08074B50 (134695760)\n-0F4FE7 CRC                   A19F99D4 (2711591380)\n-0F4FEB Compressed Size       000011CB (4555)\n-0F4FEF Uncompressed Size     000011CB (4555)\n-\n-0F4FF3 LOCAL HEADER #364     04034B50 (67324752)\n-0F4FF7 Extract Zip Spec      14 (20) '2.0'\n-0F4FF8 Extract OS            00 (0) 'MS-DOS'\n-0F4FF9 General Purpose Flag  0000 (0)\n-0F4FFB Compression Method    0000 (0) 'Stored'\n-0F4FFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5001 CRC                   00000000 (0)\n-0F5005 Compressed Size       00000000 (0)\n-0F5009 Uncompressed Size     00000000 (0)\n-0F500D Filename Length       005D (93)\n-0F500F Extra Length          0009 (9)\n-0F5011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F506E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5070   Length              0005 (5)\n-0F5072   Flags               01 (1) 'Modification'\n-0F5073   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F5077 LOCAL HEADER #365     04034B50 (67324752)\n-0F507B Extract Zip Spec      14 (20) '2.0'\n-0F507C Extract OS            00 (0) 'MS-DOS'\n-0F507D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F507F Compression Method    0000 (0) 'Stored'\n-0F5081 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5085 CRC                   00000000 (0)\n-0F5089 Compressed Size       00000000 (0)\n-0F508D Uncompressed Size     00000000 (0)\n-0F5091 Filename Length       0073 (115)\n-0F5093 Extra Length          0009 (9)\n-0F5095 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5095: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5108 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F510A   Length              0005 (5)\n-0F510C   Flags               01 (1) 'Modification'\n-0F510D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F5111 PAYLOAD\n-\n-0F7960 DATA DESCRIPTOR       08074B50 (134695760)\n-0F7964 CRC                   7573E84B (1970530379)\n-0F7968 Compressed Size       0000284F (10319)\n-0F796C Uncompressed Size     0000284F (10319)\n-\n-0F7970 LOCAL HEADER #366     04034B50 (67324752)\n-0F7974 Extract Zip Spec      14 (20) '2.0'\n-0F7975 Extract OS            00 (0) 'MS-DOS'\n-0F7976 General Purpose Flag  0000 (0)\n-0F7978 Compression Method    0000 (0) 'Stored'\n-0F797A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F797E CRC                   00000000 (0)\n-0F7982 Compressed Size       00000000 (0)\n-0F7986 Uncompressed Size     00000000 (0)\n-0F798A Filename Length       0061 (97)\n-0F798C Extra Length          0009 (9)\n-0F798E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF798E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F79EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F79F1   Length              0005 (5)\n-0F79F3   Flags               01 (1) 'Modification'\n-0F79F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0F79F8 LOCAL HEADER #367     04034B50 (67324752)\n-0F79FC Extract Zip Spec      14 (20) '2.0'\n-0F79FD Extract OS            00 (0) 'MS-DOS'\n-0F79FE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0F7A00 Compression Method    0000 (0) 'Stored'\n-0F7A02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F7A06 CRC                   00000000 (0)\n-0F7A0A Compressed Size       00000000 (0)\n-0F7A0E Uncompressed Size     00000000 (0)\n-0F7A12 Filename Length       0077 (119)\n-0F7A14 Extra Length          0009 (9)\n-0F7A16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF7A16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F7A8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F7A8F   Length              0005 (5)\n-0F7A91   Flags               01 (1) 'Modification'\n-0F7A92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F7A96 PAYLOAD\n-\n-0FA20D DATA DESCRIPTOR       08074B50 (134695760)\n-0FA211 CRC                   131CB9D8 (320649688)\n-0FA215 Compressed Size       00002777 (10103)\n-0FA219 Uncompressed Size     00002777 (10103)\n-\n-0FA21D LOCAL HEADER #368     04034B50 (67324752)\n-0FA221 Extract Zip Spec      14 (20) '2.0'\n-0FA222 Extract OS            00 (0) 'MS-DOS'\n-0FA223 General Purpose Flag  0000 (0)\n-0FA225 Compression Method    0000 (0) 'Stored'\n-0FA227 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FA22B CRC                   00000000 (0)\n-0FA22F Compressed Size       00000000 (0)\n-0FA233 Uncompressed Size     00000000 (0)\n-0FA237 Filename Length       0060 (96)\n-0FA239 Extra Length          0009 (9)\n-0FA23B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFA23B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FA29B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FA29D   Length              0005 (5)\n-0FA29F   Flags               01 (1) 'Modification'\n-0FA2A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FA2A4 LOCAL HEADER #369     04034B50 (67324752)\n-0FA2A8 Extract Zip Spec      14 (20) '2.0'\n-0FA2A9 Extract OS            00 (0) 'MS-DOS'\n-0FA2AA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FA2AC Compression Method    0000 (0) 'Stored'\n-0FA2AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FA2B2 CRC                   00000000 (0)\n-0FA2B6 Compressed Size       00000000 (0)\n-0FA2BA Uncompressed Size     00000000 (0)\n-0FA2BE Filename Length       0076 (118)\n-0FA2C0 Extra Length          0009 (9)\n-0FA2C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFA2C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FA338 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FA33A   Length              0005 (5)\n-0FA33C   Flags               01 (1) 'Modification'\n-0FA33D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FA341 PAYLOAD\n-\n-0FB44E DATA DESCRIPTOR       08074B50 (134695760)\n-0FB452 CRC                   95FAB1DA (2516234714)\n-0FB456 Compressed Size       0000110D (4365)\n-0FB45A Uncompressed Size     0000110D (4365)\n-\n-0FB45E LOCAL HEADER #370     04034B50 (67324752)\n-0FB462 Extract Zip Spec      14 (20) '2.0'\n-0FB463 Extract OS            00 (0) 'MS-DOS'\n-0FB464 General Purpose Flag  0000 (0)\n-0FB466 Compression Method    0000 (0) 'Stored'\n-0FB468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FB46C CRC                   00000000 (0)\n-0FB470 Compressed Size       00000000 (0)\n-0FB474 Uncompressed Size     00000000 (0)\n-0FB478 Filename Length       0063 (99)\n-0FB47A Extra Length          0009 (9)\n-0FB47C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFB47C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FB4DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FB4E1   Length              0005 (5)\n-0FB4E3   Flags               01 (1) 'Modification'\n-0FB4E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FB4E8 LOCAL HEADER #371     04034B50 (67324752)\n-0FB4EC Extract Zip Spec      14 (20) '2.0'\n-0FB4ED Extract OS            00 (0) 'MS-DOS'\n-0FB4EE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FB4F0 Compression Method    0000 (0) 'Stored'\n-0FB4F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FB4F6 CRC                   00000000 (0)\n-0FB4FA Compressed Size       00000000 (0)\n-0FB4FE Uncompressed Size     00000000 (0)\n-0FB502 Filename Length       0079 (121)\n-0FB504 Extra Length          0009 (9)\n-0FB506 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFB506: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FB57F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FB581   Length              0005 (5)\n-0FB583   Flags               01 (1) 'Modification'\n-0FB584   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FB588 PAYLOAD\n-\n-0FCF5E DATA DESCRIPTOR       08074B50 (134695760)\n-0FCF62 CRC                   B1E82858 (2984781912)\n-0FCF66 Compressed Size       000019D6 (6614)\n-0FCF6A Uncompressed Size     000019D6 (6614)\n-\n-0FCF6E LOCAL HEADER #372     04034B50 (67324752)\n-0FCF72 Extract Zip Spec      14 (20) '2.0'\n-0FCF73 Extract OS            00 (0) 'MS-DOS'\n-0FCF74 General Purpose Flag  0000 (0)\n-0FCF76 Compression Method    0000 (0) 'Stored'\n-0FCF78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FCF7C CRC                   00000000 (0)\n-0FCF80 Compressed Size       00000000 (0)\n-0FCF84 Uncompressed Size     00000000 (0)\n-0FCF88 Filename Length       0060 (96)\n-0FCF8A Extra Length          0009 (9)\n-0FCF8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFCF8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FCFEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FCFEE   Length              0005 (5)\n-0FCFF0   Flags               01 (1) 'Modification'\n-0FCFF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FCFF5 LOCAL HEADER #373     04034B50 (67324752)\n-0FCFF9 Extract Zip Spec      14 (20) '2.0'\n-0FCFFA Extract OS            00 (0) 'MS-DOS'\n-0FCFFB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FCFFD Compression Method    0000 (0) 'Stored'\n-0FCFFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FD003 CRC                   00000000 (0)\n-0FD007 Compressed Size       00000000 (0)\n-0FD00B Uncompressed Size     00000000 (0)\n-0FD00F Filename Length       0076 (118)\n-0FD011 Extra Length          0009 (9)\n-0FD013 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFD013: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FD089 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FD08B   Length              0005 (5)\n-0FD08D   Flags               01 (1) 'Modification'\n-0FD08E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FD092 PAYLOAD\n-\n-0FE010 DATA DESCRIPTOR       08074B50 (134695760)\n-0FE014 CRC                   EA13965E (3927152222)\n-0FE018 Compressed Size       00000F7E (3966)\n-0FE01C Uncompressed Size     00000F7E (3966)\n-\n-0FE020 LOCAL HEADER #374     04034B50 (67324752)\n-0FE024 Extract Zip Spec      14 (20) '2.0'\n-0FE025 Extract OS            00 (0) 'MS-DOS'\n-0FE026 General Purpose Flag  0000 (0)\n-0FE028 Compression Method    0000 (0) 'Stored'\n-0FE02A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE02E CRC                   00000000 (0)\n-0FE032 Compressed Size       00000000 (0)\n-0FE036 Uncompressed Size     00000000 (0)\n-0FE03A Filename Length       0059 (89)\n-0FE03C Extra Length          0009 (9)\n-0FE03E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE03E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE097 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE099   Length              0005 (5)\n-0FE09B   Flags               01 (1) 'Modification'\n-0FE09C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0FE0A0 LOCAL HEADER #375     04034B50 (67324752)\n-0FE0A4 Extract Zip Spec      14 (20) '2.0'\n-0FE0A5 Extract OS            00 (0) 'MS-DOS'\n-0FE0A6 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-0FE0A8 Compression Method    0000 (0) 'Stored'\n-0FE0AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FE0AE CRC                   00000000 (0)\n-0FE0B2 Compressed Size       00000000 (0)\n-0FE0B6 Uncompressed Size     00000000 (0)\n-0FE0BA Filename Length       006F (111)\n-0FE0BC Extra Length          0009 (9)\n-0FE0BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFE0BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FE12D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FE12F   Length              0005 (5)\n-0FE131   Flags               01 (1) 'Modification'\n-0FE132   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FE136 PAYLOAD\n-\n-100E0C DATA DESCRIPTOR       08074B50 (134695760)\n-100E10 CRC                   C8903588 (3364894088)\n-100E14 Compressed Size       00002CD6 (11478)\n-100E18 Uncompressed Size     00002CD6 (11478)\n-\n-100E1C LOCAL HEADER #376     04034B50 (67324752)\n-100E20 Extract Zip Spec      14 (20) '2.0'\n-100E21 Extract OS            00 (0) 'MS-DOS'\n-100E22 General Purpose Flag  0000 (0)\n-100E24 Compression Method    0000 (0) 'Stored'\n-100E26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-100E2A CRC                   00000000 (0)\n-100E2E Compressed Size       00000000 (0)\n-100E32 Uncompressed Size     00000000 (0)\n-100E36 Filename Length       006A (106)\n-100E38 Extra Length          0009 (9)\n-100E3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x100E3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-100EA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-100EA6   Length              0005 (5)\n-100EA8   Flags               01 (1) 'Modification'\n-100EA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-100EAD LOCAL HEADER #377     04034B50 (67324752)\n-100EB1 Extract Zip Spec      14 (20) '2.0'\n-100EB2 Extract OS            00 (0) 'MS-DOS'\n-100EB3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-100EB5 Compression Method    0000 (0) 'Stored'\n-100EB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-100EBB CRC                   00000000 (0)\n-100EBF Compressed Size       00000000 (0)\n-100EC3 Uncompressed Size     00000000 (0)\n-100EC7 Filename Length       0080 (128)\n-100EC9 Extra Length          0009 (9)\n-100ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x100ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-100F4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-100F4D   Length              0005 (5)\n-100F4F   Flags               01 (1) 'Modification'\n-100F50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-100F54 PAYLOAD\n-\n-101983 DATA DESCRIPTOR       08074B50 (134695760)\n-101987 CRC                   D19560D0 (3516227792)\n-10198B Compressed Size       00000A2F (2607)\n-10198F Uncompressed Size     00000A2F (2607)\n-\n-101993 LOCAL HEADER #378     04034B50 (67324752)\n-101997 Extract Zip Spec      14 (20) '2.0'\n-101998 Extract OS            00 (0) 'MS-DOS'\n-101999 General Purpose Flag  0000 (0)\n-10199B Compression Method    0000 (0) 'Stored'\n-10199D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1019A1 CRC                   00000000 (0)\n-1019A5 Compressed Size       00000000 (0)\n-1019A9 Uncompressed Size     00000000 (0)\n-1019AD Filename Length       002F (47)\n-1019AF Extra Length          0009 (9)\n-1019B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1019B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1019E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1019E2   Length              0005 (5)\n-1019E4   Flags               01 (1) 'Modification'\n-1019E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1019E9 LOCAL HEADER #379     04034B50 (67324752)\n-1019ED Extract Zip Spec      14 (20) '2.0'\n-1019EE Extract OS            00 (0) 'MS-DOS'\n-1019EF General Purpose Flag  0000 (0)\n-1019F1 Compression Method    0000 (0) 'Stored'\n-1019F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1019F7 CRC                   00000000 (0)\n-1019FB Compressed Size       00000000 (0)\n-1019FF Uncompressed Size     00000000 (0)\n-101A03 Filename Length       0038 (56)\n-101A05 Extra Length          0009 (9)\n-101A07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x101A07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-101A3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101A41   Length              0005 (5)\n-101A43   Flags               01 (1) 'Modification'\n-101A44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-101A48 LOCAL HEADER #380     04034B50 (67324752)\n-101A4C Extract Zip Spec      14 (20) '2.0'\n-101A4D Extract OS            00 (0) 'MS-DOS'\n-101A4E General Purpose Flag  0000 (0)\n-101A50 Compression Method    0000 (0) 'Stored'\n-101A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-101A56 CRC                   00000000 (0)\n-101A5A Compressed Size       00000000 (0)\n-101A5E Uncompressed Size     00000000 (0)\n-101A62 Filename Length       006E (110)\n-101A64 Extra Length          0009 (9)\n-101A66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x101A66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-101AD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101AD6   Length              0005 (5)\n-101AD8   Flags               01 (1) 'Modification'\n-101AD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-101ADD LOCAL HEADER #381     04034B50 (67324752)\n-101AE1 Extract Zip Spec      14 (20) '2.0'\n-101AE2 Extract OS            00 (0) 'MS-DOS'\n-101AE3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-101AE5 Compression Method    0000 (0) 'Stored'\n-101AE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-101AEB CRC                   00000000 (0)\n-101AEF Compressed Size       00000000 (0)\n-101AF3 Uncompressed Size     00000000 (0)\n-101AF7 Filename Length       0084 (132)\n-101AF9 Extra Length          0009 (9)\n-101AFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0B55A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B55A5   Length              0005 (5)\n+0B55A7   Flags               01 (1) 'Modification'\n+0B55A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B55AC PAYLOAD\n+\n+0B6C56 DATA DESCRIPTOR       08074B50 (134695760)\n+0B6C5A CRC                   3DE98548 (1038714184)\n+0B6C5E Compressed Size       000016AA (5802)\n+0B6C62 Uncompressed Size     000016AA (5802)\n+\n+0B6C66 LOCAL HEADER #282     04034B50 (67324752)\n+0B6C6A Extract Zip Spec      14 (20) '2.0'\n+0B6C6B Extract OS            00 (0) 'MS-DOS'\n+0B6C6C General Purpose Flag  0000 (0)\n+0B6C6E Compression Method    0000 (0) 'Stored'\n+0B6C70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6C74 CRC                   00000000 (0)\n+0B6C78 Compressed Size       00000000 (0)\n+0B6C7C Uncompressed Size     00000000 (0)\n+0B6C80 Filename Length       0024 (36)\n+0B6C82 Extra Length          0009 (9)\n+0B6C84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6C84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6CA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6CAA   Length              0005 (5)\n+0B6CAC   Flags               01 (1) 'Modification'\n+0B6CAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6CB1 LOCAL HEADER #283     04034B50 (67324752)\n+0B6CB5 Extract Zip Spec      14 (20) '2.0'\n+0B6CB6 Extract OS            00 (0) 'MS-DOS'\n+0B6CB7 General Purpose Flag  0000 (0)\n+0B6CB9 Compression Method    0000 (0) 'Stored'\n+0B6CBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6CBF CRC                   00000000 (0)\n+0B6CC3 Compressed Size       00000000 (0)\n+0B6CC7 Uncompressed Size     00000000 (0)\n+0B6CCB Filename Length       002D (45)\n+0B6CCD Extra Length          0009 (9)\n+0B6CCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6CCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6CFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6CFE   Length              0005 (5)\n+0B6D00   Flags               01 (1) 'Modification'\n+0B6D01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6D05 LOCAL HEADER #284     04034B50 (67324752)\n+0B6D09 Extract Zip Spec      14 (20) '2.0'\n+0B6D0A Extract OS            00 (0) 'MS-DOS'\n+0B6D0B General Purpose Flag  0000 (0)\n+0B6D0D Compression Method    0000 (0) 'Stored'\n+0B6D0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6D13 CRC                   00000000 (0)\n+0B6D17 Compressed Size       00000000 (0)\n+0B6D1B Uncompressed Size     00000000 (0)\n+0B6D1F Filename Length       005B (91)\n+0B6D21 Extra Length          0009 (9)\n+0B6D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6D7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6D80   Length              0005 (5)\n+0B6D82   Flags               01 (1) 'Modification'\n+0B6D83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B6D87 LOCAL HEADER #285     04034B50 (67324752)\n+0B6D8B Extract Zip Spec      14 (20) '2.0'\n+0B6D8C Extract OS            00 (0) 'MS-DOS'\n+0B6D8D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B6D8F Compression Method    0000 (0) 'Stored'\n+0B6D91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B6D95 CRC                   00000000 (0)\n+0B6D99 Compressed Size       00000000 (0)\n+0B6D9D Uncompressed Size     00000000 (0)\n+0B6DA1 Filename Length       0071 (113)\n+0B6DA3 Extra Length          0009 (9)\n+0B6DA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB6DA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B6E16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B6E18   Length              0005 (5)\n+0B6E1A   Flags               01 (1) 'Modification'\n+0B6E1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B6E1F PAYLOAD\n+\n+0B86C7 DATA DESCRIPTOR       08074B50 (134695760)\n+0B86CB CRC                   561A3BB2 (1444559794)\n+0B86CF Compressed Size       000018A8 (6312)\n+0B86D3 Uncompressed Size     000018A8 (6312)\n+\n+0B86D7 LOCAL HEADER #286     04034B50 (67324752)\n+0B86DB Extract Zip Spec      14 (20) '2.0'\n+0B86DC Extract OS            00 (0) 'MS-DOS'\n+0B86DD General Purpose Flag  0000 (0)\n+0B86DF Compression Method    0000 (0) 'Stored'\n+0B86E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B86E5 CRC                   00000000 (0)\n+0B86E9 Compressed Size       00000000 (0)\n+0B86ED Uncompressed Size     00000000 (0)\n+0B86F1 Filename Length       005A (90)\n+0B86F3 Extra Length          0009 (9)\n+0B86F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB86F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B874F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B8751   Length              0005 (5)\n+0B8753   Flags               01 (1) 'Modification'\n+0B8754   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0B8758 LOCAL HEADER #287     04034B50 (67324752)\n+0B875C Extract Zip Spec      14 (20) '2.0'\n+0B875D Extract OS            00 (0) 'MS-DOS'\n+0B875E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0B8760 Compression Method    0000 (0) 'Stored'\n+0B8762 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B8766 CRC                   00000000 (0)\n+0B876A Compressed Size       00000000 (0)\n+0B876E Uncompressed Size     00000000 (0)\n+0B8772 Filename Length       0070 (112)\n+0B8774 Extra Length          0009 (9)\n+0B8776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB8776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B87E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B87E8   Length              0005 (5)\n+0B87EA   Flags               01 (1) 'Modification'\n+0B87EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B87EF PAYLOAD\n+\n+0BA2B1 DATA DESCRIPTOR       08074B50 (134695760)\n+0BA2B5 CRC                   A1D18B9C (2714864540)\n+0BA2B9 Compressed Size       00001AC2 (6850)\n+0BA2BD Uncompressed Size     00001AC2 (6850)\n+\n+0BA2C1 LOCAL HEADER #288     04034B50 (67324752)\n+0BA2C5 Extract Zip Spec      14 (20) '2.0'\n+0BA2C6 Extract OS            00 (0) 'MS-DOS'\n+0BA2C7 General Purpose Flag  0000 (0)\n+0BA2C9 Compression Method    0000 (0) 'Stored'\n+0BA2CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BA2CF CRC                   00000000 (0)\n+0BA2D3 Compressed Size       00000000 (0)\n+0BA2D7 Uncompressed Size     00000000 (0)\n+0BA2DB Filename Length       005B (91)\n+0BA2DD Extra Length          0009 (9)\n+0BA2DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBA2DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BA33A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BA33C   Length              0005 (5)\n+0BA33E   Flags               01 (1) 'Modification'\n+0BA33F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BA343 LOCAL HEADER #289     04034B50 (67324752)\n+0BA347 Extract Zip Spec      14 (20) '2.0'\n+0BA348 Extract OS            00 (0) 'MS-DOS'\n+0BA349 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BA34B Compression Method    0000 (0) 'Stored'\n+0BA34D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BA351 CRC                   00000000 (0)\n+0BA355 Compressed Size       00000000 (0)\n+0BA359 Uncompressed Size     00000000 (0)\n+0BA35D Filename Length       0071 (113)\n+0BA35F Extra Length          0009 (9)\n+0BA361 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBA361: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BA3D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BA3D4   Length              0005 (5)\n+0BA3D6   Flags               01 (1) 'Modification'\n+0BA3D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BA3DB PAYLOAD\n+\n+0BB774 DATA DESCRIPTOR       08074B50 (134695760)\n+0BB778 CRC                   33231FD5 (857939925)\n+0BB77C Compressed Size       00001399 (5017)\n+0BB780 Uncompressed Size     00001399 (5017)\n+\n+0BB784 LOCAL HEADER #290     04034B50 (67324752)\n+0BB788 Extract Zip Spec      14 (20) '2.0'\n+0BB789 Extract OS            00 (0) 'MS-DOS'\n+0BB78A General Purpose Flag  0000 (0)\n+0BB78C Compression Method    0000 (0) 'Stored'\n+0BB78E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB792 CRC                   00000000 (0)\n+0BB796 Compressed Size       00000000 (0)\n+0BB79A Uncompressed Size     00000000 (0)\n+0BB79E Filename Length       0023 (35)\n+0BB7A0 Extra Length          0009 (9)\n+0BB7A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB7A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB7C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB7C7   Length              0005 (5)\n+0BB7C9   Flags               01 (1) 'Modification'\n+0BB7CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BB7CE LOCAL HEADER #291     04034B50 (67324752)\n+0BB7D2 Extract Zip Spec      14 (20) '2.0'\n+0BB7D3 Extract OS            00 (0) 'MS-DOS'\n+0BB7D4 General Purpose Flag  0000 (0)\n+0BB7D6 Compression Method    0000 (0) 'Stored'\n+0BB7D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB7DC CRC                   00000000 (0)\n+0BB7E0 Compressed Size       00000000 (0)\n+0BB7E4 Uncompressed Size     00000000 (0)\n+0BB7E8 Filename Length       002C (44)\n+0BB7EA Extra Length          0009 (9)\n+0BB7EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB7EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB818 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB81A   Length              0005 (5)\n+0BB81C   Flags               01 (1) 'Modification'\n+0BB81D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BB821 LOCAL HEADER #292     04034B50 (67324752)\n+0BB825 Extract Zip Spec      14 (20) '2.0'\n+0BB826 Extract OS            00 (0) 'MS-DOS'\n+0BB827 General Purpose Flag  0000 (0)\n+0BB829 Compression Method    0000 (0) 'Stored'\n+0BB82B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB82F CRC                   00000000 (0)\n+0BB833 Compressed Size       00000000 (0)\n+0BB837 Uncompressed Size     00000000 (0)\n+0BB83B Filename Length       0054 (84)\n+0BB83D Extra Length          0009 (9)\n+0BB83F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB83F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB893 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB895   Length              0005 (5)\n+0BB897   Flags               01 (1) 'Modification'\n+0BB898   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BB89C LOCAL HEADER #293     04034B50 (67324752)\n+0BB8A0 Extract Zip Spec      14 (20) '2.0'\n+0BB8A1 Extract OS            00 (0) 'MS-DOS'\n+0BB8A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BB8A4 Compression Method    0000 (0) 'Stored'\n+0BB8A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BB8AA CRC                   00000000 (0)\n+0BB8AE Compressed Size       00000000 (0)\n+0BB8B2 Uncompressed Size     00000000 (0)\n+0BB8B6 Filename Length       006A (106)\n+0BB8B8 Extra Length          0009 (9)\n+0BB8BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBB8BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BB924 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BB926   Length              0005 (5)\n+0BB928   Flags               01 (1) 'Modification'\n+0BB929   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BB92D PAYLOAD\n+\n+0BC625 DATA DESCRIPTOR       08074B50 (134695760)\n+0BC629 CRC                   63C353AF (1673745327)\n+0BC62D Compressed Size       00000CF8 (3320)\n+0BC631 Uncompressed Size     00000CF8 (3320)\n+\n+0BC635 LOCAL HEADER #294     04034B50 (67324752)\n+0BC639 Extract Zip Spec      14 (20) '2.0'\n+0BC63A Extract OS            00 (0) 'MS-DOS'\n+0BC63B General Purpose Flag  0000 (0)\n+0BC63D Compression Method    0000 (0) 'Stored'\n+0BC63F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BC643 CRC                   00000000 (0)\n+0BC647 Compressed Size       00000000 (0)\n+0BC64B Uncompressed Size     00000000 (0)\n+0BC64F Filename Length       005B (91)\n+0BC651 Extra Length          0009 (9)\n+0BC653 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBC653: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BC6AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BC6B0   Length              0005 (5)\n+0BC6B2   Flags               01 (1) 'Modification'\n+0BC6B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BC6B7 LOCAL HEADER #295     04034B50 (67324752)\n+0BC6BB Extract Zip Spec      14 (20) '2.0'\n+0BC6BC Extract OS            00 (0) 'MS-DOS'\n+0BC6BD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BC6BF Compression Method    0000 (0) 'Stored'\n+0BC6C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BC6C5 CRC                   00000000 (0)\n+0BC6C9 Compressed Size       00000000 (0)\n+0BC6CD Uncompressed Size     00000000 (0)\n+0BC6D1 Filename Length       0071 (113)\n+0BC6D3 Extra Length          0009 (9)\n+0BC6D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBC6D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BC746 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BC748   Length              0005 (5)\n+0BC74A   Flags               01 (1) 'Modification'\n+0BC74B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BC74F PAYLOAD\n+\n+0BCE72 DATA DESCRIPTOR       08074B50 (134695760)\n+0BCE76 CRC                   C64481A5 (3326378405)\n+0BCE7A Compressed Size       00000723 (1827)\n+0BCE7E Uncompressed Size     00000723 (1827)\n+\n+0BCE82 LOCAL HEADER #296     04034B50 (67324752)\n+0BCE86 Extract Zip Spec      14 (20) '2.0'\n+0BCE87 Extract OS            00 (0) 'MS-DOS'\n+0BCE88 General Purpose Flag  0000 (0)\n+0BCE8A Compression Method    0000 (0) 'Stored'\n+0BCE8C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BCE90 CRC                   00000000 (0)\n+0BCE94 Compressed Size       00000000 (0)\n+0BCE98 Uncompressed Size     00000000 (0)\n+0BCE9C Filename Length       0059 (89)\n+0BCE9E Extra Length          0009 (9)\n+0BCEA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBCEA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BCEF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BCEFB   Length              0005 (5)\n+0BCEFD   Flags               01 (1) 'Modification'\n+0BCEFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BCF02 LOCAL HEADER #297     04034B50 (67324752)\n+0BCF06 Extract Zip Spec      14 (20) '2.0'\n+0BCF07 Extract OS            00 (0) 'MS-DOS'\n+0BCF08 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BCF0A Compression Method    0000 (0) 'Stored'\n+0BCF0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BCF10 CRC                   00000000 (0)\n+0BCF14 Compressed Size       00000000 (0)\n+0BCF18 Uncompressed Size     00000000 (0)\n+0BCF1C Filename Length       006F (111)\n+0BCF1E Extra Length          0009 (9)\n+0BCF20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBCF20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BCF8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BCF91   Length              0005 (5)\n+0BCF93   Flags               01 (1) 'Modification'\n+0BCF94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BCF98 PAYLOAD\n+\n+0BD67A DATA DESCRIPTOR       08074B50 (134695760)\n+0BD67E CRC                   39649106 (962892038)\n+0BD682 Compressed Size       000006E2 (1762)\n+0BD686 Uncompressed Size     000006E2 (1762)\n+\n+0BD68A LOCAL HEADER #298     04034B50 (67324752)\n+0BD68E Extract Zip Spec      14 (20) '2.0'\n+0BD68F Extract OS            00 (0) 'MS-DOS'\n+0BD690 General Purpose Flag  0000 (0)\n+0BD692 Compression Method    0000 (0) 'Stored'\n+0BD694 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BD698 CRC                   00000000 (0)\n+0BD69C Compressed Size       00000000 (0)\n+0BD6A0 Uncompressed Size     00000000 (0)\n+0BD6A4 Filename Length       0054 (84)\n+0BD6A6 Extra Length          0009 (9)\n+0BD6A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBD6A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BD6FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BD6FE   Length              0005 (5)\n+0BD700   Flags               01 (1) 'Modification'\n+0BD701   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BD705 LOCAL HEADER #299     04034B50 (67324752)\n+0BD709 Extract Zip Spec      14 (20) '2.0'\n+0BD70A Extract OS            00 (0) 'MS-DOS'\n+0BD70B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BD70D Compression Method    0000 (0) 'Stored'\n+0BD70F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BD713 CRC                   00000000 (0)\n+0BD717 Compressed Size       00000000 (0)\n+0BD71B Uncompressed Size     00000000 (0)\n+0BD71F Filename Length       006A (106)\n+0BD721 Extra Length          0009 (9)\n+0BD723 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBD723: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BD78D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BD78F   Length              0005 (5)\n+0BD791   Flags               01 (1) 'Modification'\n+0BD792   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BD796 PAYLOAD\n+\n+0BDF18 DATA DESCRIPTOR       08074B50 (134695760)\n+0BDF1C CRC                   8DC8B44C (2378740812)\n+0BDF20 Compressed Size       00000782 (1922)\n+0BDF24 Uncompressed Size     00000782 (1922)\n+\n+0BDF28 LOCAL HEADER #300     04034B50 (67324752)\n+0BDF2C Extract Zip Spec      14 (20) '2.0'\n+0BDF2D Extract OS            00 (0) 'MS-DOS'\n+0BDF2E General Purpose Flag  0000 (0)\n+0BDF30 Compression Method    0000 (0) 'Stored'\n+0BDF32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BDF36 CRC                   00000000 (0)\n+0BDF3A Compressed Size       00000000 (0)\n+0BDF3E Uncompressed Size     00000000 (0)\n+0BDF42 Filename Length       0025 (37)\n+0BDF44 Extra Length          0009 (9)\n+0BDF46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBDF46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BDF6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BDF6D   Length              0005 (5)\n+0BDF6F   Flags               01 (1) 'Modification'\n+0BDF70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BDF74 LOCAL HEADER #301     04034B50 (67324752)\n+0BDF78 Extract Zip Spec      14 (20) '2.0'\n+0BDF79 Extract OS            00 (0) 'MS-DOS'\n+0BDF7A General Purpose Flag  0000 (0)\n+0BDF7C Compression Method    0000 (0) 'Stored'\n+0BDF7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BDF82 CRC                   00000000 (0)\n+0BDF86 Compressed Size       00000000 (0)\n+0BDF8A Uncompressed Size     00000000 (0)\n+0BDF8E Filename Length       002E (46)\n+0BDF90 Extra Length          0009 (9)\n+0BDF92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBDF92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BDFC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BDFC2   Length              0005 (5)\n+0BDFC4   Flags               01 (1) 'Modification'\n+0BDFC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BDFC9 LOCAL HEADER #302     04034B50 (67324752)\n+0BDFCD Extract Zip Spec      14 (20) '2.0'\n+0BDFCE Extract OS            00 (0) 'MS-DOS'\n+0BDFCF General Purpose Flag  0000 (0)\n+0BDFD1 Compression Method    0000 (0) 'Stored'\n+0BDFD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BDFD7 CRC                   00000000 (0)\n+0BDFDB Compressed Size       00000000 (0)\n+0BDFDF Uncompressed Size     00000000 (0)\n+0BDFE3 Filename Length       005E (94)\n+0BDFE5 Extra Length          0009 (9)\n+0BDFE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBDFE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE045 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE047   Length              0005 (5)\n+0BE049   Flags               01 (1) 'Modification'\n+0BE04A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BE04E LOCAL HEADER #303     04034B50 (67324752)\n+0BE052 Extract Zip Spec      14 (20) '2.0'\n+0BE053 Extract OS            00 (0) 'MS-DOS'\n+0BE054 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BE056 Compression Method    0000 (0) 'Stored'\n+0BE058 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BE05C CRC                   00000000 (0)\n+0BE060 Compressed Size       00000000 (0)\n+0BE064 Uncompressed Size     00000000 (0)\n+0BE068 Filename Length       0074 (116)\n+0BE06A Extra Length          0009 (9)\n+0BE06C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBE06C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BE0E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BE0E2   Length              0005 (5)\n+0BE0E4   Flags               01 (1) 'Modification'\n+0BE0E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BE0E9 PAYLOAD\n+\n+0BEF83 DATA DESCRIPTOR       08074B50 (134695760)\n+0BEF87 CRC                   335CA1CD (861708749)\n+0BEF8B Compressed Size       00000E9A (3738)\n+0BEF8F Uncompressed Size     00000E9A (3738)\n+\n+0BEF93 LOCAL HEADER #304     04034B50 (67324752)\n+0BEF97 Extract Zip Spec      14 (20) '2.0'\n+0BEF98 Extract OS            00 (0) 'MS-DOS'\n+0BEF99 General Purpose Flag  0000 (0)\n+0BEF9B Compression Method    0000 (0) 'Stored'\n+0BEF9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BEFA1 CRC                   00000000 (0)\n+0BEFA5 Compressed Size       00000000 (0)\n+0BEFA9 Uncompressed Size     00000000 (0)\n+0BEFAD Filename Length       006A (106)\n+0BEFAF Extra Length          0009 (9)\n+0BEFB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBEFB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BF01B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BF01D   Length              0005 (5)\n+0BF01F   Flags               01 (1) 'Modification'\n+0BF020   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0BF024 LOCAL HEADER #305     04034B50 (67324752)\n+0BF028 Extract Zip Spec      14 (20) '2.0'\n+0BF029 Extract OS            00 (0) 'MS-DOS'\n+0BF02A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0BF02C Compression Method    0000 (0) 'Stored'\n+0BF02E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BF032 CRC                   00000000 (0)\n+0BF036 Compressed Size       00000000 (0)\n+0BF03A Uncompressed Size     00000000 (0)\n+0BF03E Filename Length       0080 (128)\n+0BF040 Extra Length          0009 (9)\n+0BF042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBF042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BF0C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BF0C4   Length              0005 (5)\n+0BF0C6   Flags               01 (1) 'Modification'\n+0BF0C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BF0CB PAYLOAD\n+\n+0C0124 DATA DESCRIPTOR       08074B50 (134695760)\n+0C0128 CRC                   3EE7FDDD (1055391197)\n+0C012C Compressed Size       00001059 (4185)\n+0C0130 Uncompressed Size     00001059 (4185)\n+\n+0C0134 LOCAL HEADER #306     04034B50 (67324752)\n+0C0138 Extract Zip Spec      14 (20) '2.0'\n+0C0139 Extract OS            00 (0) 'MS-DOS'\n+0C013A General Purpose Flag  0000 (0)\n+0C013C Compression Method    0000 (0) 'Stored'\n+0C013E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0142 CRC                   00000000 (0)\n+0C0146 Compressed Size       00000000 (0)\n+0C014A Uncompressed Size     00000000 (0)\n+0C014E Filename Length       0027 (39)\n+0C0150 Extra Length          0009 (9)\n+0C0152 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0152: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0179 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C017B   Length              0005 (5)\n+0C017D   Flags               01 (1) 'Modification'\n+0C017E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0182 LOCAL HEADER #307     04034B50 (67324752)\n+0C0186 Extract Zip Spec      14 (20) '2.0'\n+0C0187 Extract OS            00 (0) 'MS-DOS'\n+0C0188 General Purpose Flag  0000 (0)\n+0C018A Compression Method    0000 (0) 'Stored'\n+0C018C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0190 CRC                   00000000 (0)\n+0C0194 Compressed Size       00000000 (0)\n+0C0198 Uncompressed Size     00000000 (0)\n+0C019C Filename Length       0030 (48)\n+0C019E Extra Length          0009 (9)\n+0C01A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC01A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C01D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C01D2   Length              0005 (5)\n+0C01D4   Flags               01 (1) 'Modification'\n+0C01D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C01D9 LOCAL HEADER #308     04034B50 (67324752)\n+0C01DD Extract Zip Spec      14 (20) '2.0'\n+0C01DE Extract OS            00 (0) 'MS-DOS'\n+0C01DF General Purpose Flag  0000 (0)\n+0C01E1 Compression Method    0000 (0) 'Stored'\n+0C01E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C01E7 CRC                   00000000 (0)\n+0C01EB Compressed Size       00000000 (0)\n+0C01EF Uncompressed Size     00000000 (0)\n+0C01F3 Filename Length       0069 (105)\n+0C01F5 Extra Length          0009 (9)\n+0C01F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC01F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0260 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0262   Length              0005 (5)\n+0C0264   Flags               01 (1) 'Modification'\n+0C0265   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C0269 LOCAL HEADER #309     04034B50 (67324752)\n+0C026D Extract Zip Spec      14 (20) '2.0'\n+0C026E Extract OS            00 (0) 'MS-DOS'\n+0C026F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C0271 Compression Method    0000 (0) 'Stored'\n+0C0273 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0277 CRC                   00000000 (0)\n+0C027B Compressed Size       00000000 (0)\n+0C027F Uncompressed Size     00000000 (0)\n+0C0283 Filename Length       007F (127)\n+0C0285 Extra Length          0009 (9)\n+0C0287 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0287: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C0306 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C0308   Length              0005 (5)\n+0C030A   Flags               01 (1) 'Modification'\n+0C030B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C030F PAYLOAD\n+\n+0C0F6A DATA DESCRIPTOR       08074B50 (134695760)\n+0C0F6E CRC                   67FA3A91 (1744452241)\n+0C0F72 Compressed Size       00000C5B (3163)\n+0C0F76 Uncompressed Size     00000C5B (3163)\n+\n+0C0F7A LOCAL HEADER #310     04034B50 (67324752)\n+0C0F7E Extract Zip Spec      14 (20) '2.0'\n+0C0F7F Extract OS            00 (0) 'MS-DOS'\n+0C0F80 General Purpose Flag  0000 (0)\n+0C0F82 Compression Method    0000 (0) 'Stored'\n+0C0F84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C0F88 CRC                   00000000 (0)\n+0C0F8C Compressed Size       00000000 (0)\n+0C0F90 Uncompressed Size     00000000 (0)\n+0C0F94 Filename Length       0069 (105)\n+0C0F96 Extra Length          0009 (9)\n+0C0F98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC0F98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C1001 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C1003   Length              0005 (5)\n+0C1005   Flags               01 (1) 'Modification'\n+0C1006   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C100A LOCAL HEADER #311     04034B50 (67324752)\n+0C100E Extract Zip Spec      14 (20) '2.0'\n+0C100F Extract OS            00 (0) 'MS-DOS'\n+0C1010 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C1012 Compression Method    0000 (0) 'Stored'\n+0C1014 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C1018 CRC                   00000000 (0)\n+0C101C Compressed Size       00000000 (0)\n+0C1020 Uncompressed Size     00000000 (0)\n+0C1024 Filename Length       007F (127)\n+0C1026 Extra Length          0009 (9)\n+0C1028 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1028: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C10A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C10A9   Length              0005 (5)\n+0C10AB   Flags               01 (1) 'Modification'\n+0C10AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C10B0 PAYLOAD\n+\n+0C1870 DATA DESCRIPTOR       08074B50 (134695760)\n+0C1874 CRC                   63513D5C (1666268508)\n+0C1878 Compressed Size       000007C0 (1984)\n+0C187C Uncompressed Size     000007C0 (1984)\n+\n+0C1880 LOCAL HEADER #312     04034B50 (67324752)\n+0C1884 Extract Zip Spec      14 (20) '2.0'\n+0C1885 Extract OS            00 (0) 'MS-DOS'\n+0C1886 General Purpose Flag  0000 (0)\n+0C1888 Compression Method    0000 (0) 'Stored'\n+0C188A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C188E CRC                   00000000 (0)\n+0C1892 Compressed Size       00000000 (0)\n+0C1896 Uncompressed Size     00000000 (0)\n+0C189A Filename Length       0060 (96)\n+0C189C Extra Length          0009 (9)\n+0C189E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC189E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C18FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C1900   Length              0005 (5)\n+0C1902   Flags               01 (1) 'Modification'\n+0C1903   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C1907 LOCAL HEADER #313     04034B50 (67324752)\n+0C190B Extract Zip Spec      14 (20) '2.0'\n+0C190C Extract OS            00 (0) 'MS-DOS'\n+0C190D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C190F Compression Method    0000 (0) 'Stored'\n+0C1911 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C1915 CRC                   00000000 (0)\n+0C1919 Compressed Size       00000000 (0)\n+0C191D Uncompressed Size     00000000 (0)\n+0C1921 Filename Length       0076 (118)\n+0C1923 Extra Length          0009 (9)\n+0C1925 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC1925: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C199B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C199D   Length              0005 (5)\n+0C199F   Flags               01 (1) 'Modification'\n+0C19A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C19A4 PAYLOAD\n+\n+0C287E DATA DESCRIPTOR       08074B50 (134695760)\n+0C2882 CRC                   99929518 (2576520472)\n+0C2886 Compressed Size       00000EDA (3802)\n+0C288A Uncompressed Size     00000EDA (3802)\n+\n+0C288E LOCAL HEADER #314     04034B50 (67324752)\n+0C2892 Extract Zip Spec      14 (20) '2.0'\n+0C2893 Extract OS            00 (0) 'MS-DOS'\n+0C2894 General Purpose Flag  0000 (0)\n+0C2896 Compression Method    0000 (0) 'Stored'\n+0C2898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C289C CRC                   00000000 (0)\n+0C28A0 Compressed Size       00000000 (0)\n+0C28A4 Uncompressed Size     00000000 (0)\n+0C28A8 Filename Length       005E (94)\n+0C28AA Extra Length          0009 (9)\n+0C28AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC28AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C290A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C290C   Length              0005 (5)\n+0C290E   Flags               01 (1) 'Modification'\n+0C290F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C2913 LOCAL HEADER #315     04034B50 (67324752)\n+0C2917 Extract Zip Spec      14 (20) '2.0'\n+0C2918 Extract OS            00 (0) 'MS-DOS'\n+0C2919 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C291B Compression Method    0000 (0) 'Stored'\n+0C291D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C2921 CRC                   00000000 (0)\n+0C2925 Compressed Size       00000000 (0)\n+0C2929 Uncompressed Size     00000000 (0)\n+0C292D Filename Length       0074 (116)\n+0C292F Extra Length          0009 (9)\n+0C2931 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC2931: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C29A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C29A7   Length              0005 (5)\n+0C29A9   Flags               01 (1) 'Modification'\n+0C29AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C29AE PAYLOAD\n+\n+0C32A6 DATA DESCRIPTOR       08074B50 (134695760)\n+0C32AA CRC                   E6BF62E0 (3871302368)\n+0C32AE Compressed Size       000008F8 (2296)\n+0C32B2 Uncompressed Size     000008F8 (2296)\n+\n+0C32B6 LOCAL HEADER #316     04034B50 (67324752)\n+0C32BA Extract Zip Spec      14 (20) '2.0'\n+0C32BB Extract OS            00 (0) 'MS-DOS'\n+0C32BC General Purpose Flag  0000 (0)\n+0C32BE Compression Method    0000 (0) 'Stored'\n+0C32C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C32C4 CRC                   00000000 (0)\n+0C32C8 Compressed Size       00000000 (0)\n+0C32CC Uncompressed Size     00000000 (0)\n+0C32D0 Filename Length       0065 (101)\n+0C32D2 Extra Length          0009 (9)\n+0C32D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC32D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3339 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C333B   Length              0005 (5)\n+0C333D   Flags               01 (1) 'Modification'\n+0C333E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C3342 LOCAL HEADER #317     04034B50 (67324752)\n+0C3346 Extract Zip Spec      14 (20) '2.0'\n+0C3347 Extract OS            00 (0) 'MS-DOS'\n+0C3348 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C334A Compression Method    0000 (0) 'Stored'\n+0C334C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3350 CRC                   00000000 (0)\n+0C3354 Compressed Size       00000000 (0)\n+0C3358 Uncompressed Size     00000000 (0)\n+0C335C Filename Length       007B (123)\n+0C335E Extra Length          0009 (9)\n+0C3360 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3360: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C33DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C33DD   Length              0005 (5)\n+0C33DF   Flags               01 (1) 'Modification'\n+0C33E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C33E4 PAYLOAD\n+\n+0C3C15 DATA DESCRIPTOR       08074B50 (134695760)\n+0C3C19 CRC                   F05E2331 (4032701233)\n+0C3C1D Compressed Size       00000831 (2097)\n+0C3C21 Uncompressed Size     00000831 (2097)\n+\n+0C3C25 LOCAL HEADER #318     04034B50 (67324752)\n+0C3C29 Extract Zip Spec      14 (20) '2.0'\n+0C3C2A Extract OS            00 (0) 'MS-DOS'\n+0C3C2B General Purpose Flag  0000 (0)\n+0C3C2D Compression Method    0000 (0) 'Stored'\n+0C3C2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3C33 CRC                   00000000 (0)\n+0C3C37 Compressed Size       00000000 (0)\n+0C3C3B Uncompressed Size     00000000 (0)\n+0C3C3F Filename Length       0063 (99)\n+0C3C41 Extra Length          0009 (9)\n+0C3C43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3C43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3CA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3CA8   Length              0005 (5)\n+0C3CAA   Flags               01 (1) 'Modification'\n+0C3CAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C3CAF LOCAL HEADER #319     04034B50 (67324752)\n+0C3CB3 Extract Zip Spec      14 (20) '2.0'\n+0C3CB4 Extract OS            00 (0) 'MS-DOS'\n+0C3CB5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C3CB7 Compression Method    0000 (0) 'Stored'\n+0C3CB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C3CBD CRC                   00000000 (0)\n+0C3CC1 Compressed Size       00000000 (0)\n+0C3CC5 Uncompressed Size     00000000 (0)\n+0C3CC9 Filename Length       0079 (121)\n+0C3CCB Extra Length          0009 (9)\n+0C3CCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC3CCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C3D46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C3D48   Length              0005 (5)\n+0C3D4A   Flags               01 (1) 'Modification'\n+0C3D4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C3D4F PAYLOAD\n+\n+0C531F DATA DESCRIPTOR       08074B50 (134695760)\n+0C5323 CRC                   80ED3BA4 (2163030948)\n+0C5327 Compressed Size       000015D0 (5584)\n+0C532B Uncompressed Size     000015D0 (5584)\n+\n+0C532F LOCAL HEADER #320     04034B50 (67324752)\n+0C5333 Extract Zip Spec      14 (20) '2.0'\n+0C5334 Extract OS            00 (0) 'MS-DOS'\n+0C5335 General Purpose Flag  0000 (0)\n+0C5337 Compression Method    0000 (0) 'Stored'\n+0C5339 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C533D CRC                   00000000 (0)\n+0C5341 Compressed Size       00000000 (0)\n+0C5345 Uncompressed Size     00000000 (0)\n+0C5349 Filename Length       0069 (105)\n+0C534B Extra Length          0009 (9)\n+0C534D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC534D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C53B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C53B8   Length              0005 (5)\n+0C53BA   Flags               01 (1) 'Modification'\n+0C53BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C53BF LOCAL HEADER #321     04034B50 (67324752)\n+0C53C3 Extract Zip Spec      14 (20) '2.0'\n+0C53C4 Extract OS            00 (0) 'MS-DOS'\n+0C53C5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C53C7 Compression Method    0000 (0) 'Stored'\n+0C53C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C53CD CRC                   00000000 (0)\n+0C53D1 Compressed Size       00000000 (0)\n+0C53D5 Uncompressed Size     00000000 (0)\n+0C53D9 Filename Length       007F (127)\n+0C53DB Extra Length          0009 (9)\n+0C53DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC53DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C545C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C545E   Length              0005 (5)\n+0C5460   Flags               01 (1) 'Modification'\n+0C5461   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C5465 PAYLOAD\n+\n+0C7413 DATA DESCRIPTOR       08074B50 (134695760)\n+0C7417 CRC                   7018E446 (1880679494)\n+0C741B Compressed Size       00001FAE (8110)\n+0C741F Uncompressed Size     00001FAE (8110)\n+\n+0C7423 LOCAL HEADER #322     04034B50 (67324752)\n+0C7427 Extract Zip Spec      14 (20) '2.0'\n+0C7428 Extract OS            00 (0) 'MS-DOS'\n+0C7429 General Purpose Flag  0000 (0)\n+0C742B Compression Method    0000 (0) 'Stored'\n+0C742D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C7431 CRC                   00000000 (0)\n+0C7435 Compressed Size       00000000 (0)\n+0C7439 Uncompressed Size     00000000 (0)\n+0C743D Filename Length       0060 (96)\n+0C743F Extra Length          0009 (9)\n+0C7441 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC7441: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C74A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C74A3   Length              0005 (5)\n+0C74A5   Flags               01 (1) 'Modification'\n+0C74A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C74AA LOCAL HEADER #323     04034B50 (67324752)\n+0C74AE Extract Zip Spec      14 (20) '2.0'\n+0C74AF Extract OS            00 (0) 'MS-DOS'\n+0C74B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C74B2 Compression Method    0000 (0) 'Stored'\n+0C74B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C74B8 CRC                   00000000 (0)\n+0C74BC Compressed Size       00000000 (0)\n+0C74C0 Uncompressed Size     00000000 (0)\n+0C74C4 Filename Length       0076 (118)\n+0C74C6 Extra Length          0009 (9)\n+0C74C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC74C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C753E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C7540   Length              0005 (5)\n+0C7542   Flags               01 (1) 'Modification'\n+0C7543   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C7547 PAYLOAD\n+\n+0C8841 DATA DESCRIPTOR       08074B50 (134695760)\n+0C8845 CRC                   61A0CE5A (1637928538)\n+0C8849 Compressed Size       000012FA (4858)\n+0C884D Uncompressed Size     000012FA (4858)\n+\n+0C8851 LOCAL HEADER #324     04034B50 (67324752)\n+0C8855 Extract Zip Spec      14 (20) '2.0'\n+0C8856 Extract OS            00 (0) 'MS-DOS'\n+0C8857 General Purpose Flag  0000 (0)\n+0C8859 Compression Method    0000 (0) 'Stored'\n+0C885B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C885F CRC                   00000000 (0)\n+0C8863 Compressed Size       00000000 (0)\n+0C8867 Uncompressed Size     00000000 (0)\n+0C886B Filename Length       0063 (99)\n+0C886D Extra Length          0009 (9)\n+0C886F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC886F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C88D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C88D4   Length              0005 (5)\n+0C88D6   Flags               01 (1) 'Modification'\n+0C88D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C88DB LOCAL HEADER #325     04034B50 (67324752)\n+0C88DF Extract Zip Spec      14 (20) '2.0'\n+0C88E0 Extract OS            00 (0) 'MS-DOS'\n+0C88E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C88E3 Compression Method    0000 (0) 'Stored'\n+0C88E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C88E9 CRC                   00000000 (0)\n+0C88ED Compressed Size       00000000 (0)\n+0C88F1 Uncompressed Size     00000000 (0)\n+0C88F5 Filename Length       0079 (121)\n+0C88F7 Extra Length          0009 (9)\n+0C88F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC88F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C8972 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C8974   Length              0005 (5)\n+0C8976   Flags               01 (1) 'Modification'\n+0C8977   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C897B PAYLOAD\n+\n+0C9C8C DATA DESCRIPTOR       08074B50 (134695760)\n+0C9C90 CRC                   5A804AEF (1518357231)\n+0C9C94 Compressed Size       00001311 (4881)\n+0C9C98 Uncompressed Size     00001311 (4881)\n+\n+0C9C9C LOCAL HEADER #326     04034B50 (67324752)\n+0C9CA0 Extract Zip Spec      14 (20) '2.0'\n+0C9CA1 Extract OS            00 (0) 'MS-DOS'\n+0C9CA2 General Purpose Flag  0000 (0)\n+0C9CA4 Compression Method    0000 (0) 'Stored'\n+0C9CA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9CAA CRC                   00000000 (0)\n+0C9CAE Compressed Size       00000000 (0)\n+0C9CB2 Uncompressed Size     00000000 (0)\n+0C9CB6 Filename Length       005F (95)\n+0C9CB8 Extra Length          0009 (9)\n+0C9CBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9CBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9D19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9D1B   Length              0005 (5)\n+0C9D1D   Flags               01 (1) 'Modification'\n+0C9D1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0C9D22 LOCAL HEADER #327     04034B50 (67324752)\n+0C9D26 Extract Zip Spec      14 (20) '2.0'\n+0C9D27 Extract OS            00 (0) 'MS-DOS'\n+0C9D28 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0C9D2A Compression Method    0000 (0) 'Stored'\n+0C9D2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C9D30 CRC                   00000000 (0)\n+0C9D34 Compressed Size       00000000 (0)\n+0C9D38 Uncompressed Size     00000000 (0)\n+0C9D3C Filename Length       0075 (117)\n+0C9D3E Extra Length          0009 (9)\n+0C9D40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC9D40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C9DB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C9DB7   Length              0005 (5)\n+0C9DB9   Flags               01 (1) 'Modification'\n+0C9DBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C9DBE PAYLOAD\n+\n+0CC5A2 DATA DESCRIPTOR       08074B50 (134695760)\n+0CC5A6 CRC                   F4A07CA3 (4104158371)\n+0CC5AA Compressed Size       000027E4 (10212)\n+0CC5AE Uncompressed Size     000027E4 (10212)\n+\n+0CC5B2 LOCAL HEADER #328     04034B50 (67324752)\n+0CC5B6 Extract Zip Spec      14 (20) '2.0'\n+0CC5B7 Extract OS            00 (0) 'MS-DOS'\n+0CC5B8 General Purpose Flag  0000 (0)\n+0CC5BA Compression Method    0000 (0) 'Stored'\n+0CC5BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CC5C0 CRC                   00000000 (0)\n+0CC5C4 Compressed Size       00000000 (0)\n+0CC5C8 Uncompressed Size     00000000 (0)\n+0CC5CC Filename Length       0067 (103)\n+0CC5CE Extra Length          0009 (9)\n+0CC5D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCC5D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CC637 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CC639   Length              0005 (5)\n+0CC63B   Flags               01 (1) 'Modification'\n+0CC63C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CC640 LOCAL HEADER #329     04034B50 (67324752)\n+0CC644 Extract Zip Spec      14 (20) '2.0'\n+0CC645 Extract OS            00 (0) 'MS-DOS'\n+0CC646 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CC648 Compression Method    0000 (0) 'Stored'\n+0CC64A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CC64E CRC                   00000000 (0)\n+0CC652 Compressed Size       00000000 (0)\n+0CC656 Uncompressed Size     00000000 (0)\n+0CC65A Filename Length       007D (125)\n+0CC65C Extra Length          0009 (9)\n+0CC65E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCC65E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CC6DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CC6DD   Length              0005 (5)\n+0CC6DF   Flags               01 (1) 'Modification'\n+0CC6E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CC6E4 PAYLOAD\n+\n+0CD95A DATA DESCRIPTOR       08074B50 (134695760)\n+0CD95E CRC                   6E031E40 (1845698112)\n+0CD962 Compressed Size       00001276 (4726)\n+0CD966 Uncompressed Size     00001276 (4726)\n+\n+0CD96A LOCAL HEADER #330     04034B50 (67324752)\n+0CD96E Extract Zip Spec      14 (20) '2.0'\n+0CD96F Extract OS            00 (0) 'MS-DOS'\n+0CD970 General Purpose Flag  0000 (0)\n+0CD972 Compression Method    0000 (0) 'Stored'\n+0CD974 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CD978 CRC                   00000000 (0)\n+0CD97C Compressed Size       00000000 (0)\n+0CD980 Uncompressed Size     00000000 (0)\n+0CD984 Filename Length       0066 (102)\n+0CD986 Extra Length          0009 (9)\n+0CD988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCD988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CD9EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CD9F0   Length              0005 (5)\n+0CD9F2   Flags               01 (1) 'Modification'\n+0CD9F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CD9F7 LOCAL HEADER #331     04034B50 (67324752)\n+0CD9FB Extract Zip Spec      14 (20) '2.0'\n+0CD9FC Extract OS            00 (0) 'MS-DOS'\n+0CD9FD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CD9FF Compression Method    0000 (0) 'Stored'\n+0CDA01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CDA05 CRC                   00000000 (0)\n+0CDA09 Compressed Size       00000000 (0)\n+0CDA0D Uncompressed Size     00000000 (0)\n+0CDA11 Filename Length       007C (124)\n+0CDA13 Extra Length          0009 (9)\n+0CDA15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCDA15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CDA91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CDA93   Length              0005 (5)\n+0CDA95   Flags               01 (1) 'Modification'\n+0CDA96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CDA9A PAYLOAD\n+\n+0CE678 DATA DESCRIPTOR       08074B50 (134695760)\n+0CE67C CRC                   5987930A (1502057226)\n+0CE680 Compressed Size       00000BDE (3038)\n+0CE684 Uncompressed Size     00000BDE (3038)\n+\n+0CE688 LOCAL HEADER #332     04034B50 (67324752)\n+0CE68C Extract Zip Spec      14 (20) '2.0'\n+0CE68D Extract OS            00 (0) 'MS-DOS'\n+0CE68E General Purpose Flag  0000 (0)\n+0CE690 Compression Method    0000 (0) 'Stored'\n+0CE692 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE696 CRC                   00000000 (0)\n+0CE69A Compressed Size       00000000 (0)\n+0CE69E Uncompressed Size     00000000 (0)\n+0CE6A2 Filename Length       0067 (103)\n+0CE6A4 Extra Length          0009 (9)\n+0CE6A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE6A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE70D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE70F   Length              0005 (5)\n+0CE711   Flags               01 (1) 'Modification'\n+0CE712   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CE716 LOCAL HEADER #333     04034B50 (67324752)\n+0CE71A Extract Zip Spec      14 (20) '2.0'\n+0CE71B Extract OS            00 (0) 'MS-DOS'\n+0CE71C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CE71E Compression Method    0000 (0) 'Stored'\n+0CE720 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE724 CRC                   00000000 (0)\n+0CE728 Compressed Size       00000000 (0)\n+0CE72C Uncompressed Size     00000000 (0)\n+0CE730 Filename Length       007D (125)\n+0CE732 Extra Length          0009 (9)\n+0CE734 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE734: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE7B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE7B3   Length              0005 (5)\n+0CE7B5   Flags               01 (1) 'Modification'\n+0CE7B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE7BA PAYLOAD\n+\n+0CF089 DATA DESCRIPTOR       08074B50 (134695760)\n+0CF08D CRC                   CA93F7B9 (3398694841)\n+0CF091 Compressed Size       000008CF (2255)\n+0CF095 Uncompressed Size     000008CF (2255)\n+\n+0CF099 LOCAL HEADER #334     04034B50 (67324752)\n+0CF09D Extract Zip Spec      14 (20) '2.0'\n+0CF09E Extract OS            00 (0) 'MS-DOS'\n+0CF09F General Purpose Flag  0000 (0)\n+0CF0A1 Compression Method    0000 (0) 'Stored'\n+0CF0A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF0A7 CRC                   00000000 (0)\n+0CF0AB Compressed Size       00000000 (0)\n+0CF0AF Uncompressed Size     00000000 (0)\n+0CF0B3 Filename Length       0065 (101)\n+0CF0B5 Extra Length          0009 (9)\n+0CF0B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF0B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF11C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF11E   Length              0005 (5)\n+0CF120   Flags               01 (1) 'Modification'\n+0CF121   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CF125 LOCAL HEADER #335     04034B50 (67324752)\n+0CF129 Extract Zip Spec      14 (20) '2.0'\n+0CF12A Extract OS            00 (0) 'MS-DOS'\n+0CF12B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CF12D Compression Method    0000 (0) 'Stored'\n+0CF12F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CF133 CRC                   00000000 (0)\n+0CF137 Compressed Size       00000000 (0)\n+0CF13B Uncompressed Size     00000000 (0)\n+0CF13F Filename Length       007B (123)\n+0CF141 Extra Length          0009 (9)\n+0CF143 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF143: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF1BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF1C0   Length              0005 (5)\n+0CF1C2   Flags               01 (1) 'Modification'\n+0CF1C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CF1C7 PAYLOAD\n+\n+0CFE70 DATA DESCRIPTOR       08074B50 (134695760)\n+0CFE74 CRC                   673E5975 (1732139381)\n+0CFE78 Compressed Size       00000CA9 (3241)\n+0CFE7C Uncompressed Size     00000CA9 (3241)\n+\n+0CFE80 LOCAL HEADER #336     04034B50 (67324752)\n+0CFE84 Extract Zip Spec      14 (20) '2.0'\n+0CFE85 Extract OS            00 (0) 'MS-DOS'\n+0CFE86 General Purpose Flag  0000 (0)\n+0CFE88 Compression Method    0000 (0) 'Stored'\n+0CFE8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CFE8E CRC                   00000000 (0)\n+0CFE92 Compressed Size       00000000 (0)\n+0CFE96 Uncompressed Size     00000000 (0)\n+0CFE9A Filename Length       0063 (99)\n+0CFE9C Extra Length          0009 (9)\n+0CFE9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCFE9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CFF01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CFF03   Length              0005 (5)\n+0CFF05   Flags               01 (1) 'Modification'\n+0CFF06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0CFF0A LOCAL HEADER #337     04034B50 (67324752)\n+0CFF0E Extract Zip Spec      14 (20) '2.0'\n+0CFF0F Extract OS            00 (0) 'MS-DOS'\n+0CFF10 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0CFF12 Compression Method    0000 (0) 'Stored'\n+0CFF14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CFF18 CRC                   00000000 (0)\n+0CFF1C Compressed Size       00000000 (0)\n+0CFF20 Uncompressed Size     00000000 (0)\n+0CFF24 Filename Length       0079 (121)\n+0CFF26 Extra Length          0009 (9)\n+0CFF28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCFF28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CFFA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CFFA3   Length              0005 (5)\n+0CFFA5   Flags               01 (1) 'Modification'\n+0CFFA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CFFAA PAYLOAD\n+\n+0D4FE2 DATA DESCRIPTOR       08074B50 (134695760)\n+0D4FE6 CRC                   2D1E752C (756970796)\n+0D4FEA Compressed Size       00005038 (20536)\n+0D4FEE Uncompressed Size     00005038 (20536)\n+\n+0D4FF2 LOCAL HEADER #338     04034B50 (67324752)\n+0D4FF6 Extract Zip Spec      14 (20) '2.0'\n+0D4FF7 Extract OS            00 (0) 'MS-DOS'\n+0D4FF8 General Purpose Flag  0000 (0)\n+0D4FFA Compression Method    0000 (0) 'Stored'\n+0D4FFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D5000 CRC                   00000000 (0)\n+0D5004 Compressed Size       00000000 (0)\n+0D5008 Uncompressed Size     00000000 (0)\n+0D500C Filename Length       005C (92)\n+0D500E Extra Length          0009 (9)\n+0D5010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD5010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D506C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D506E   Length              0005 (5)\n+0D5070   Flags               01 (1) 'Modification'\n+0D5071   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D5075 LOCAL HEADER #339     04034B50 (67324752)\n+0D5079 Extract Zip Spec      14 (20) '2.0'\n+0D507A Extract OS            00 (0) 'MS-DOS'\n+0D507B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D507D Compression Method    0000 (0) 'Stored'\n+0D507F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D5083 CRC                   00000000 (0)\n+0D5087 Compressed Size       00000000 (0)\n+0D508B Uncompressed Size     00000000 (0)\n+0D508F Filename Length       0072 (114)\n+0D5091 Extra Length          0009 (9)\n+0D5093 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD5093: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D5105 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D5107   Length              0005 (5)\n+0D5109   Flags               01 (1) 'Modification'\n+0D510A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D510E PAYLOAD\n+\n+0D6B93 DATA DESCRIPTOR       08074B50 (134695760)\n+0D6B97 CRC                   DB187B38 (3675814712)\n+0D6B9B Compressed Size       00001A85 (6789)\n+0D6B9F Uncompressed Size     00001A85 (6789)\n+\n+0D6BA3 LOCAL HEADER #340     04034B50 (67324752)\n+0D6BA7 Extract Zip Spec      14 (20) '2.0'\n+0D6BA8 Extract OS            00 (0) 'MS-DOS'\n+0D6BA9 General Purpose Flag  0000 (0)\n+0D6BAB Compression Method    0000 (0) 'Stored'\n+0D6BAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6BB1 CRC                   00000000 (0)\n+0D6BB5 Compressed Size       00000000 (0)\n+0D6BB9 Uncompressed Size     00000000 (0)\n+0D6BBD Filename Length       005D (93)\n+0D6BBF Extra Length          0009 (9)\n+0D6BC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6BC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6C1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6C20   Length              0005 (5)\n+0D6C22   Flags               01 (1) 'Modification'\n+0D6C23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D6C27 LOCAL HEADER #341     04034B50 (67324752)\n+0D6C2B Extract Zip Spec      14 (20) '2.0'\n+0D6C2C Extract OS            00 (0) 'MS-DOS'\n+0D6C2D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D6C2F Compression Method    0000 (0) 'Stored'\n+0D6C31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D6C35 CRC                   00000000 (0)\n+0D6C39 Compressed Size       00000000 (0)\n+0D6C3D Uncompressed Size     00000000 (0)\n+0D6C41 Filename Length       0073 (115)\n+0D6C43 Extra Length          0009 (9)\n+0D6C45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6C45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D6CB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D6CBA   Length              0005 (5)\n+0D6CBC   Flags               01 (1) 'Modification'\n+0D6CBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D6CC1 PAYLOAD\n+\n+0D872F DATA DESCRIPTOR       08074B50 (134695760)\n+0D8733 CRC                   CD183667 (3440916071)\n+0D8737 Compressed Size       00001A6E (6766)\n+0D873B Uncompressed Size     00001A6E (6766)\n+\n+0D873F LOCAL HEADER #342     04034B50 (67324752)\n+0D8743 Extract Zip Spec      14 (20) '2.0'\n+0D8744 Extract OS            00 (0) 'MS-DOS'\n+0D8745 General Purpose Flag  0000 (0)\n+0D8747 Compression Method    0000 (0) 'Stored'\n+0D8749 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D874D CRC                   00000000 (0)\n+0D8751 Compressed Size       00000000 (0)\n+0D8755 Uncompressed Size     00000000 (0)\n+0D8759 Filename Length       005D (93)\n+0D875B Extra Length          0009 (9)\n+0D875D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD875D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D87BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D87BC   Length              0005 (5)\n+0D87BE   Flags               01 (1) 'Modification'\n+0D87BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0D87C3 LOCAL HEADER #343     04034B50 (67324752)\n+0D87C7 Extract Zip Spec      14 (20) '2.0'\n+0D87C8 Extract OS            00 (0) 'MS-DOS'\n+0D87C9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0D87CB Compression Method    0000 (0) 'Stored'\n+0D87CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D87D1 CRC                   00000000 (0)\n+0D87D5 Compressed Size       00000000 (0)\n+0D87D9 Uncompressed Size     00000000 (0)\n+0D87DD Filename Length       0073 (115)\n+0D87DF Extra Length          0009 (9)\n+0D87E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD87E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8854 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8856   Length              0005 (5)\n+0D8858   Flags               01 (1) 'Modification'\n+0D8859   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D885D PAYLOAD\n+\n+0DA2EF DATA DESCRIPTOR       08074B50 (134695760)\n+0DA2F3 CRC                   0C7DD276 (209572470)\n+0DA2F7 Compressed Size       00001A92 (6802)\n+0DA2FB Uncompressed Size     00001A92 (6802)\n+\n+0DA2FF LOCAL HEADER #344     04034B50 (67324752)\n+0DA303 Extract Zip Spec      14 (20) '2.0'\n+0DA304 Extract OS            00 (0) 'MS-DOS'\n+0DA305 General Purpose Flag  0000 (0)\n+0DA307 Compression Method    0000 (0) 'Stored'\n+0DA309 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA30D CRC                   00000000 (0)\n+0DA311 Compressed Size       00000000 (0)\n+0DA315 Uncompressed Size     00000000 (0)\n+0DA319 Filename Length       005E (94)\n+0DA31B Extra Length          0009 (9)\n+0DA31D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA31D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA37B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA37D   Length              0005 (5)\n+0DA37F   Flags               01 (1) 'Modification'\n+0DA380   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DA384 LOCAL HEADER #345     04034B50 (67324752)\n+0DA388 Extract Zip Spec      14 (20) '2.0'\n+0DA389 Extract OS            00 (0) 'MS-DOS'\n+0DA38A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DA38C Compression Method    0000 (0) 'Stored'\n+0DA38E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DA392 CRC                   00000000 (0)\n+0DA396 Compressed Size       00000000 (0)\n+0DA39A Uncompressed Size     00000000 (0)\n+0DA39E Filename Length       0074 (116)\n+0DA3A0 Extra Length          0009 (9)\n+0DA3A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDA3A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DA416 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DA418   Length              0005 (5)\n+0DA41A   Flags               01 (1) 'Modification'\n+0DA41B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DA41F PAYLOAD\n+\n+0DBB52 DATA DESCRIPTOR       08074B50 (134695760)\n+0DBB56 CRC                   60EA12C2 (1625952962)\n+0DBB5A Compressed Size       00001733 (5939)\n+0DBB5E Uncompressed Size     00001733 (5939)\n+\n+0DBB62 LOCAL HEADER #346     04034B50 (67324752)\n+0DBB66 Extract Zip Spec      14 (20) '2.0'\n+0DBB67 Extract OS            00 (0) 'MS-DOS'\n+0DBB68 General Purpose Flag  0000 (0)\n+0DBB6A Compression Method    0000 (0) 'Stored'\n+0DBB6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBB70 CRC                   00000000 (0)\n+0DBB74 Compressed Size       00000000 (0)\n+0DBB78 Uncompressed Size     00000000 (0)\n+0DBB7C Filename Length       0061 (97)\n+0DBB7E Extra Length          0009 (9)\n+0DBB80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDBB80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DBBE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBBE3   Length              0005 (5)\n+0DBBE5   Flags               01 (1) 'Modification'\n+0DBBE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DBBEA LOCAL HEADER #347     04034B50 (67324752)\n+0DBBEE Extract Zip Spec      14 (20) '2.0'\n+0DBBEF Extract OS            00 (0) 'MS-DOS'\n+0DBBF0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DBBF2 Compression Method    0000 (0) 'Stored'\n+0DBBF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DBBF8 CRC                   00000000 (0)\n+0DBBFC Compressed Size       00000000 (0)\n+0DBC00 Uncompressed Size     00000000 (0)\n+0DBC04 Filename Length       0077 (119)\n+0DBC06 Extra Length          0009 (9)\n+0DBC08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDBC08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DBC7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DBC81   Length              0005 (5)\n+0DBC83   Flags               01 (1) 'Modification'\n+0DBC84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DBC88 PAYLOAD\n+\n+0DD305 DATA DESCRIPTOR       08074B50 (134695760)\n+0DD309 CRC                   4BB1EABD (1269951165)\n+0DD30D Compressed Size       0000167D (5757)\n+0DD311 Uncompressed Size     0000167D (5757)\n+\n+0DD315 LOCAL HEADER #348     04034B50 (67324752)\n+0DD319 Extract Zip Spec      14 (20) '2.0'\n+0DD31A Extract OS            00 (0) 'MS-DOS'\n+0DD31B General Purpose Flag  0000 (0)\n+0DD31D Compression Method    0000 (0) 'Stored'\n+0DD31F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DD323 CRC                   00000000 (0)\n+0DD327 Compressed Size       00000000 (0)\n+0DD32B Uncompressed Size     00000000 (0)\n+0DD32F Filename Length       0061 (97)\n+0DD331 Extra Length          0009 (9)\n+0DD333 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDD333: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DD394 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD396   Length              0005 (5)\n+0DD398   Flags               01 (1) 'Modification'\n+0DD399   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0DD39D LOCAL HEADER #349     04034B50 (67324752)\n+0DD3A1 Extract Zip Spec      14 (20) '2.0'\n+0DD3A2 Extract OS            00 (0) 'MS-DOS'\n+0DD3A3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0DD3A5 Compression Method    0000 (0) 'Stored'\n+0DD3A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DD3AB CRC                   00000000 (0)\n+0DD3AF Compressed Size       00000000 (0)\n+0DD3B3 Uncompressed Size     00000000 (0)\n+0DD3B7 Filename Length       0077 (119)\n+0DD3B9 Extra Length          0009 (9)\n+0DD3BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDD3BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DD432 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DD434   Length              0005 (5)\n+0DD436   Flags               01 (1) 'Modification'\n+0DD437   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DD43B PAYLOAD\n+\n+0E06C5 DATA DESCRIPTOR       08074B50 (134695760)\n+0E06C9 CRC                   A18A8EB9 (2710212281)\n+0E06CD Compressed Size       0000328A (12938)\n+0E06D1 Uncompressed Size     0000328A (12938)\n+\n+0E06D5 LOCAL HEADER #350     04034B50 (67324752)\n+0E06D9 Extract Zip Spec      14 (20) '2.0'\n+0E06DA Extract OS            00 (0) 'MS-DOS'\n+0E06DB General Purpose Flag  0000 (0)\n+0E06DD Compression Method    0000 (0) 'Stored'\n+0E06DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E06E3 CRC                   00000000 (0)\n+0E06E7 Compressed Size       00000000 (0)\n+0E06EB Uncompressed Size     00000000 (0)\n+0E06EF Filename Length       0060 (96)\n+0E06F1 Extra Length          0009 (9)\n+0E06F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE06F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E0753 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E0755   Length              0005 (5)\n+0E0757   Flags               01 (1) 'Modification'\n+0E0758   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E075C LOCAL HEADER #351     04034B50 (67324752)\n+0E0760 Extract Zip Spec      14 (20) '2.0'\n+0E0761 Extract OS            00 (0) 'MS-DOS'\n+0E0762 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E0764 Compression Method    0000 (0) 'Stored'\n+0E0766 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E076A CRC                   00000000 (0)\n+0E076E Compressed Size       00000000 (0)\n+0E0772 Uncompressed Size     00000000 (0)\n+0E0776 Filename Length       0076 (118)\n+0E0778 Extra Length          0009 (9)\n+0E077A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE077A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E07F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E07F2   Length              0005 (5)\n+0E07F4   Flags               01 (1) 'Modification'\n+0E07F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E07F9 PAYLOAD\n+\n+0E4072 DATA DESCRIPTOR       08074B50 (134695760)\n+0E4076 CRC                   B7B762D6 (3082248918)\n+0E407A Compressed Size       00003879 (14457)\n+0E407E Uncompressed Size     00003879 (14457)\n+\n+0E4082 LOCAL HEADER #352     04034B50 (67324752)\n+0E4086 Extract Zip Spec      14 (20) '2.0'\n+0E4087 Extract OS            00 (0) 'MS-DOS'\n+0E4088 General Purpose Flag  0000 (0)\n+0E408A Compression Method    0000 (0) 'Stored'\n+0E408C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E4090 CRC                   00000000 (0)\n+0E4094 Compressed Size       00000000 (0)\n+0E4098 Uncompressed Size     00000000 (0)\n+0E409C Filename Length       0064 (100)\n+0E409E Extra Length          0009 (9)\n+0E40A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE40A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E4104 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E4106   Length              0005 (5)\n+0E4108   Flags               01 (1) 'Modification'\n+0E4109   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E410D LOCAL HEADER #353     04034B50 (67324752)\n+0E4111 Extract Zip Spec      14 (20) '2.0'\n+0E4112 Extract OS            00 (0) 'MS-DOS'\n+0E4113 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E4115 Compression Method    0000 (0) 'Stored'\n+0E4117 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E411B CRC                   00000000 (0)\n+0E411F Compressed Size       00000000 (0)\n+0E4123 Uncompressed Size     00000000 (0)\n+0E4127 Filename Length       007A (122)\n+0E4129 Extra Length          0009 (9)\n+0E412B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE412B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E41A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E41A7   Length              0005 (5)\n+0E41A9   Flags               01 (1) 'Modification'\n+0E41AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E41AE PAYLOAD\n+\n+0E62FE DATA DESCRIPTOR       08074B50 (134695760)\n+0E6302 CRC                   A2B9D29A (2730087066)\n+0E6306 Compressed Size       00002150 (8528)\n+0E630A Uncompressed Size     00002150 (8528)\n+\n+0E630E LOCAL HEADER #354     04034B50 (67324752)\n+0E6312 Extract Zip Spec      14 (20) '2.0'\n+0E6313 Extract OS            00 (0) 'MS-DOS'\n+0E6314 General Purpose Flag  0000 (0)\n+0E6316 Compression Method    0000 (0) 'Stored'\n+0E6318 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E631C CRC                   00000000 (0)\n+0E6320 Compressed Size       00000000 (0)\n+0E6324 Uncompressed Size     00000000 (0)\n+0E6328 Filename Length       005D (93)\n+0E632A Extra Length          0009 (9)\n+0E632C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE632C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6389 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E638B   Length              0005 (5)\n+0E638D   Flags               01 (1) 'Modification'\n+0E638E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E6392 LOCAL HEADER #355     04034B50 (67324752)\n+0E6396 Extract Zip Spec      14 (20) '2.0'\n+0E6397 Extract OS            00 (0) 'MS-DOS'\n+0E6398 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E639A Compression Method    0000 (0) 'Stored'\n+0E639C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E63A0 CRC                   00000000 (0)\n+0E63A4 Compressed Size       00000000 (0)\n+0E63A8 Uncompressed Size     00000000 (0)\n+0E63AC Filename Length       0073 (115)\n+0E63AE Extra Length          0009 (9)\n+0E63B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE63B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E6423 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E6425   Length              0005 (5)\n+0E6427   Flags               01 (1) 'Modification'\n+0E6428   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E642C PAYLOAD\n+\n+0E7608 DATA DESCRIPTOR       08074B50 (134695760)\n+0E760C CRC                   C4FC7EA2 (3304881826)\n+0E7610 Compressed Size       000011DC (4572)\n+0E7614 Uncompressed Size     000011DC (4572)\n+\n+0E7618 LOCAL HEADER #356     04034B50 (67324752)\n+0E761C Extract Zip Spec      14 (20) '2.0'\n+0E761D Extract OS            00 (0) 'MS-DOS'\n+0E761E General Purpose Flag  0000 (0)\n+0E7620 Compression Method    0000 (0) 'Stored'\n+0E7622 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E7626 CRC                   00000000 (0)\n+0E762A Compressed Size       00000000 (0)\n+0E762E Uncompressed Size     00000000 (0)\n+0E7632 Filename Length       0060 (96)\n+0E7634 Extra Length          0009 (9)\n+0E7636 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE7636: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E7696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E7698   Length              0005 (5)\n+0E769A   Flags               01 (1) 'Modification'\n+0E769B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0E769F LOCAL HEADER #357     04034B50 (67324752)\n+0E76A3 Extract Zip Spec      14 (20) '2.0'\n+0E76A4 Extract OS            00 (0) 'MS-DOS'\n+0E76A5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0E76A7 Compression Method    0000 (0) 'Stored'\n+0E76A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E76AD CRC                   00000000 (0)\n+0E76B1 Compressed Size       00000000 (0)\n+0E76B5 Uncompressed Size     00000000 (0)\n+0E76B9 Filename Length       0076 (118)\n+0E76BB Extra Length          0009 (9)\n+0E76BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE76BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E7733 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E7735   Length              0005 (5)\n+0E7737   Flags               01 (1) 'Modification'\n+0E7738   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E773C PAYLOAD\n+\n+0EEA37 DATA DESCRIPTOR       08074B50 (134695760)\n+0EEA3B CRC                   EE30A8D8 (3996166360)\n+0EEA3F Compressed Size       000072FB (29435)\n+0EEA43 Uncompressed Size     000072FB (29435)\n+\n+0EEA47 LOCAL HEADER #358     04034B50 (67324752)\n+0EEA4B Extract Zip Spec      14 (20) '2.0'\n+0EEA4C Extract OS            00 (0) 'MS-DOS'\n+0EEA4D General Purpose Flag  0000 (0)\n+0EEA4F Compression Method    0000 (0) 'Stored'\n+0EEA51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EEA55 CRC                   00000000 (0)\n+0EEA59 Compressed Size       00000000 (0)\n+0EEA5D Uncompressed Size     00000000 (0)\n+0EEA61 Filename Length       0066 (102)\n+0EEA63 Extra Length          0009 (9)\n+0EEA65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEEA65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EEACB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EEACD   Length              0005 (5)\n+0EEACF   Flags               01 (1) 'Modification'\n+0EEAD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0EEAD4 LOCAL HEADER #359     04034B50 (67324752)\n+0EEAD8 Extract Zip Spec      14 (20) '2.0'\n+0EEAD9 Extract OS            00 (0) 'MS-DOS'\n+0EEADA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0EEADC Compression Method    0000 (0) 'Stored'\n+0EEADE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EEAE2 CRC                   00000000 (0)\n+0EEAE6 Compressed Size       00000000 (0)\n+0EEAEA Uncompressed Size     00000000 (0)\n+0EEAEE Filename Length       007C (124)\n+0EEAF0 Extra Length          0009 (9)\n+0EEAF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEEAF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EEB6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EEB70   Length              0005 (5)\n+0EEB72   Flags               01 (1) 'Modification'\n+0EEB73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EEB77 PAYLOAD\n+\n+0F3385 DATA DESCRIPTOR       08074B50 (134695760)\n+0F3389 CRC                   EA36353C (3929421116)\n+0F338D Compressed Size       0000480E (18446)\n+0F3391 Uncompressed Size     0000480E (18446)\n+\n+0F3395 LOCAL HEADER #360     04034B50 (67324752)\n+0F3399 Extract Zip Spec      14 (20) '2.0'\n+0F339A Extract OS            00 (0) 'MS-DOS'\n+0F339B General Purpose Flag  0000 (0)\n+0F339D Compression Method    0000 (0) 'Stored'\n+0F339F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F33A3 CRC                   00000000 (0)\n+0F33A7 Compressed Size       00000000 (0)\n+0F33AB Uncompressed Size     00000000 (0)\n+0F33AF Filename Length       0065 (101)\n+0F33B1 Extra Length          0009 (9)\n+0F33B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF33B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3418 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F341A   Length              0005 (5)\n+0F341C   Flags               01 (1) 'Modification'\n+0F341D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F3421 LOCAL HEADER #361     04034B50 (67324752)\n+0F3425 Extract Zip Spec      14 (20) '2.0'\n+0F3426 Extract OS            00 (0) 'MS-DOS'\n+0F3427 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F3429 Compression Method    0000 (0) 'Stored'\n+0F342B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F342F CRC                   00000000 (0)\n+0F3433 Compressed Size       00000000 (0)\n+0F3437 Uncompressed Size     00000000 (0)\n+0F343B Filename Length       007B (123)\n+0F343D Extra Length          0009 (9)\n+0F343F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF343F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F34BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F34BC   Length              0005 (5)\n+0F34BE   Flags               01 (1) 'Modification'\n+0F34BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F34C3 PAYLOAD\n+\n+0F3C79 DATA DESCRIPTOR       08074B50 (134695760)\n+0F3C7D CRC                   CA474DE0 (3393670624)\n+0F3C81 Compressed Size       000007B6 (1974)\n+0F3C85 Uncompressed Size     000007B6 (1974)\n+\n+0F3C89 LOCAL HEADER #362     04034B50 (67324752)\n+0F3C8D Extract Zip Spec      14 (20) '2.0'\n+0F3C8E Extract OS            00 (0) 'MS-DOS'\n+0F3C8F General Purpose Flag  0000 (0)\n+0F3C91 Compression Method    0000 (0) 'Stored'\n+0F3C93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F3C97 CRC                   00000000 (0)\n+0F3C9B Compressed Size       00000000 (0)\n+0F3C9F Uncompressed Size     00000000 (0)\n+0F3CA3 Filename Length       0061 (97)\n+0F3CA5 Extra Length          0009 (9)\n+0F3CA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF3CA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3D08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3D0A   Length              0005 (5)\n+0F3D0C   Flags               01 (1) 'Modification'\n+0F3D0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F3D11 LOCAL HEADER #363     04034B50 (67324752)\n+0F3D15 Extract Zip Spec      14 (20) '2.0'\n+0F3D16 Extract OS            00 (0) 'MS-DOS'\n+0F3D17 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F3D19 Compression Method    0000 (0) 'Stored'\n+0F3D1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F3D1F CRC                   00000000 (0)\n+0F3D23 Compressed Size       00000000 (0)\n+0F3D27 Uncompressed Size     00000000 (0)\n+0F3D2B Filename Length       0077 (119)\n+0F3D2D Extra Length          0009 (9)\n+0F3D2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF3D2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3DA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3DA8   Length              0005 (5)\n+0F3DAA   Flags               01 (1) 'Modification'\n+0F3DAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F3DAF PAYLOAD\n+\n+0F4F7A DATA DESCRIPTOR       08074B50 (134695760)\n+0F4F7E CRC                   A19F99D4 (2711591380)\n+0F4F82 Compressed Size       000011CB (4555)\n+0F4F86 Uncompressed Size     000011CB (4555)\n+\n+0F4F8A LOCAL HEADER #364     04034B50 (67324752)\n+0F4F8E Extract Zip Spec      14 (20) '2.0'\n+0F4F8F Extract OS            00 (0) 'MS-DOS'\n+0F4F90 General Purpose Flag  0000 (0)\n+0F4F92 Compression Method    0000 (0) 'Stored'\n+0F4F94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F4F98 CRC                   00000000 (0)\n+0F4F9C Compressed Size       00000000 (0)\n+0F4FA0 Uncompressed Size     00000000 (0)\n+0F4FA4 Filename Length       005D (93)\n+0F4FA6 Extra Length          0009 (9)\n+0F4FA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF4FA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F5005 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F5007   Length              0005 (5)\n+0F5009   Flags               01 (1) 'Modification'\n+0F500A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F500E LOCAL HEADER #365     04034B50 (67324752)\n+0F5012 Extract Zip Spec      14 (20) '2.0'\n+0F5013 Extract OS            00 (0) 'MS-DOS'\n+0F5014 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F5016 Compression Method    0000 (0) 'Stored'\n+0F5018 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F501C CRC                   00000000 (0)\n+0F5020 Compressed Size       00000000 (0)\n+0F5024 Uncompressed Size     00000000 (0)\n+0F5028 Filename Length       0073 (115)\n+0F502A Extra Length          0009 (9)\n+0F502C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF502C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F509F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F50A1   Length              0005 (5)\n+0F50A3   Flags               01 (1) 'Modification'\n+0F50A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F50A8 PAYLOAD\n+\n+0F78F7 DATA DESCRIPTOR       08074B50 (134695760)\n+0F78FB CRC                   7573E84B (1970530379)\n+0F78FF Compressed Size       0000284F (10319)\n+0F7903 Uncompressed Size     0000284F (10319)\n+\n+0F7907 LOCAL HEADER #366     04034B50 (67324752)\n+0F790B Extract Zip Spec      14 (20) '2.0'\n+0F790C Extract OS            00 (0) 'MS-DOS'\n+0F790D General Purpose Flag  0000 (0)\n+0F790F Compression Method    0000 (0) 'Stored'\n+0F7911 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F7915 CRC                   00000000 (0)\n+0F7919 Compressed Size       00000000 (0)\n+0F791D Uncompressed Size     00000000 (0)\n+0F7921 Filename Length       0061 (97)\n+0F7923 Extra Length          0009 (9)\n+0F7925 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF7925: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F7986 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7988   Length              0005 (5)\n+0F798A   Flags               01 (1) 'Modification'\n+0F798B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F798F LOCAL HEADER #367     04034B50 (67324752)\n+0F7993 Extract Zip Spec      14 (20) '2.0'\n+0F7994 Extract OS            00 (0) 'MS-DOS'\n+0F7995 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0F7997 Compression Method    0000 (0) 'Stored'\n+0F7999 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F799D CRC                   00000000 (0)\n+0F79A1 Compressed Size       00000000 (0)\n+0F79A5 Uncompressed Size     00000000 (0)\n+0F79A9 Filename Length       0077 (119)\n+0F79AB Extra Length          0009 (9)\n+0F79AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF79AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F7A24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F7A26   Length              0005 (5)\n+0F7A28   Flags               01 (1) 'Modification'\n+0F7A29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F7A2D PAYLOAD\n+\n+0FA1A4 DATA DESCRIPTOR       08074B50 (134695760)\n+0FA1A8 CRC                   131CB9D8 (320649688)\n+0FA1AC Compressed Size       00002777 (10103)\n+0FA1B0 Uncompressed Size     00002777 (10103)\n+\n+0FA1B4 LOCAL HEADER #368     04034B50 (67324752)\n+0FA1B8 Extract Zip Spec      14 (20) '2.0'\n+0FA1B9 Extract OS            00 (0) 'MS-DOS'\n+0FA1BA General Purpose Flag  0000 (0)\n+0FA1BC Compression Method    0000 (0) 'Stored'\n+0FA1BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FA1C2 CRC                   00000000 (0)\n+0FA1C6 Compressed Size       00000000 (0)\n+0FA1CA Uncompressed Size     00000000 (0)\n+0FA1CE Filename Length       0060 (96)\n+0FA1D0 Extra Length          0009 (9)\n+0FA1D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFA1D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FA232 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FA234   Length              0005 (5)\n+0FA236   Flags               01 (1) 'Modification'\n+0FA237   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FA23B LOCAL HEADER #369     04034B50 (67324752)\n+0FA23F Extract Zip Spec      14 (20) '2.0'\n+0FA240 Extract OS            00 (0) 'MS-DOS'\n+0FA241 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FA243 Compression Method    0000 (0) 'Stored'\n+0FA245 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FA249 CRC                   00000000 (0)\n+0FA24D Compressed Size       00000000 (0)\n+0FA251 Uncompressed Size     00000000 (0)\n+0FA255 Filename Length       0076 (118)\n+0FA257 Extra Length          0009 (9)\n+0FA259 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFA259: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FA2CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FA2D1   Length              0005 (5)\n+0FA2D3   Flags               01 (1) 'Modification'\n+0FA2D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FA2D8 PAYLOAD\n+\n+0FB3E5 DATA DESCRIPTOR       08074B50 (134695760)\n+0FB3E9 CRC                   95FAB1DA (2516234714)\n+0FB3ED Compressed Size       0000110D (4365)\n+0FB3F1 Uncompressed Size     0000110D (4365)\n+\n+0FB3F5 LOCAL HEADER #370     04034B50 (67324752)\n+0FB3F9 Extract Zip Spec      14 (20) '2.0'\n+0FB3FA Extract OS            00 (0) 'MS-DOS'\n+0FB3FB General Purpose Flag  0000 (0)\n+0FB3FD Compression Method    0000 (0) 'Stored'\n+0FB3FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB403 CRC                   00000000 (0)\n+0FB407 Compressed Size       00000000 (0)\n+0FB40B Uncompressed Size     00000000 (0)\n+0FB40F Filename Length       0063 (99)\n+0FB411 Extra Length          0009 (9)\n+0FB413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB476 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB478   Length              0005 (5)\n+0FB47A   Flags               01 (1) 'Modification'\n+0FB47B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FB47F LOCAL HEADER #371     04034B50 (67324752)\n+0FB483 Extract Zip Spec      14 (20) '2.0'\n+0FB484 Extract OS            00 (0) 'MS-DOS'\n+0FB485 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FB487 Compression Method    0000 (0) 'Stored'\n+0FB489 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB48D CRC                   00000000 (0)\n+0FB491 Compressed Size       00000000 (0)\n+0FB495 Uncompressed Size     00000000 (0)\n+0FB499 Filename Length       0079 (121)\n+0FB49B Extra Length          0009 (9)\n+0FB49D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB49D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FB516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FB518   Length              0005 (5)\n+0FB51A   Flags               01 (1) 'Modification'\n+0FB51B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FB51F PAYLOAD\n+\n+0FCEF5 DATA DESCRIPTOR       08074B50 (134695760)\n+0FCEF9 CRC                   B1E82858 (2984781912)\n+0FCEFD Compressed Size       000019D6 (6614)\n+0FCF01 Uncompressed Size     000019D6 (6614)\n+\n+0FCF05 LOCAL HEADER #372     04034B50 (67324752)\n+0FCF09 Extract Zip Spec      14 (20) '2.0'\n+0FCF0A Extract OS            00 (0) 'MS-DOS'\n+0FCF0B General Purpose Flag  0000 (0)\n+0FCF0D Compression Method    0000 (0) 'Stored'\n+0FCF0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FCF13 CRC                   00000000 (0)\n+0FCF17 Compressed Size       00000000 (0)\n+0FCF1B Uncompressed Size     00000000 (0)\n+0FCF1F Filename Length       0060 (96)\n+0FCF21 Extra Length          0009 (9)\n+0FCF23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFCF23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FCF83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FCF85   Length              0005 (5)\n+0FCF87   Flags               01 (1) 'Modification'\n+0FCF88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FCF8C LOCAL HEADER #373     04034B50 (67324752)\n+0FCF90 Extract Zip Spec      14 (20) '2.0'\n+0FCF91 Extract OS            00 (0) 'MS-DOS'\n+0FCF92 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FCF94 Compression Method    0000 (0) 'Stored'\n+0FCF96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FCF9A CRC                   00000000 (0)\n+0FCF9E Compressed Size       00000000 (0)\n+0FCFA2 Uncompressed Size     00000000 (0)\n+0FCFA6 Filename Length       0076 (118)\n+0FCFA8 Extra Length          0009 (9)\n+0FCFAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFCFAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FD020 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FD022   Length              0005 (5)\n+0FD024   Flags               01 (1) 'Modification'\n+0FD025   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FD029 PAYLOAD\n+\n+0FDFA7 DATA DESCRIPTOR       08074B50 (134695760)\n+0FDFAB CRC                   EA13965E (3927152222)\n+0FDFAF Compressed Size       00000F7E (3966)\n+0FDFB3 Uncompressed Size     00000F7E (3966)\n+\n+0FDFB7 LOCAL HEADER #374     04034B50 (67324752)\n+0FDFBB Extract Zip Spec      14 (20) '2.0'\n+0FDFBC Extract OS            00 (0) 'MS-DOS'\n+0FDFBD General Purpose Flag  0000 (0)\n+0FDFBF Compression Method    0000 (0) 'Stored'\n+0FDFC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FDFC5 CRC                   00000000 (0)\n+0FDFC9 Compressed Size       00000000 (0)\n+0FDFCD Uncompressed Size     00000000 (0)\n+0FDFD1 Filename Length       0059 (89)\n+0FDFD3 Extra Length          0009 (9)\n+0FDFD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFDFD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FE02E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FE030   Length              0005 (5)\n+0FE032   Flags               01 (1) 'Modification'\n+0FE033   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0FE037 LOCAL HEADER #375     04034B50 (67324752)\n+0FE03B Extract Zip Spec      14 (20) '2.0'\n+0FE03C Extract OS            00 (0) 'MS-DOS'\n+0FE03D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+0FE03F Compression Method    0000 (0) 'Stored'\n+0FE041 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FE045 CRC                   00000000 (0)\n+0FE049 Compressed Size       00000000 (0)\n+0FE04D Uncompressed Size     00000000 (0)\n+0FE051 Filename Length       006F (111)\n+0FE053 Extra Length          0009 (9)\n+0FE055 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFE055: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FE0C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FE0C6   Length              0005 (5)\n+0FE0C8   Flags               01 (1) 'Modification'\n+0FE0C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FE0CD PAYLOAD\n+\n+100DA3 DATA DESCRIPTOR       08074B50 (134695760)\n+100DA7 CRC                   C8903588 (3364894088)\n+100DAB Compressed Size       00002CD6 (11478)\n+100DAF Uncompressed Size     00002CD6 (11478)\n+\n+100DB3 LOCAL HEADER #376     04034B50 (67324752)\n+100DB7 Extract Zip Spec      14 (20) '2.0'\n+100DB8 Extract OS            00 (0) 'MS-DOS'\n+100DB9 General Purpose Flag  0000 (0)\n+100DBB Compression Method    0000 (0) 'Stored'\n+100DBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+100DC1 CRC                   00000000 (0)\n+100DC5 Compressed Size       00000000 (0)\n+100DC9 Uncompressed Size     00000000 (0)\n+100DCD Filename Length       006A (106)\n+100DCF Extra Length          0009 (9)\n+100DD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x100DD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+100E3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+100E3D   Length              0005 (5)\n+100E3F   Flags               01 (1) 'Modification'\n+100E40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+100E44 LOCAL HEADER #377     04034B50 (67324752)\n+100E48 Extract Zip Spec      14 (20) '2.0'\n+100E49 Extract OS            00 (0) 'MS-DOS'\n+100E4A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+100E4C Compression Method    0000 (0) 'Stored'\n+100E4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+100E52 CRC                   00000000 (0)\n+100E56 Compressed Size       00000000 (0)\n+100E5A Uncompressed Size     00000000 (0)\n+100E5E Filename Length       0080 (128)\n+100E60 Extra Length          0009 (9)\n+100E62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x100E62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+100EE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+100EE4   Length              0005 (5)\n+100EE6   Flags               01 (1) 'Modification'\n+100EE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+100EEB PAYLOAD\n+\n+10191A DATA DESCRIPTOR       08074B50 (134695760)\n+10191E CRC                   D19560D0 (3516227792)\n+101922 Compressed Size       00000A2F (2607)\n+101926 Uncompressed Size     00000A2F (2607)\n+\n+10192A LOCAL HEADER #378     04034B50 (67324752)\n+10192E Extract Zip Spec      14 (20) '2.0'\n+10192F Extract OS            00 (0) 'MS-DOS'\n+101930 General Purpose Flag  0000 (0)\n+101932 Compression Method    0000 (0) 'Stored'\n+101934 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+101938 CRC                   00000000 (0)\n+10193C Compressed Size       00000000 (0)\n+101940 Uncompressed Size     00000000 (0)\n+101944 Filename Length       002F (47)\n+101946 Extra Length          0009 (9)\n+101948 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x101948: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+101977 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+101979   Length              0005 (5)\n+10197B   Flags               01 (1) 'Modification'\n+10197C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+101980 LOCAL HEADER #379     04034B50 (67324752)\n+101984 Extract Zip Spec      14 (20) '2.0'\n+101985 Extract OS            00 (0) 'MS-DOS'\n+101986 General Purpose Flag  0000 (0)\n+101988 Compression Method    0000 (0) 'Stored'\n+10198A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10198E CRC                   00000000 (0)\n+101992 Compressed Size       00000000 (0)\n+101996 Uncompressed Size     00000000 (0)\n+10199A Filename Length       0038 (56)\n+10199C Extra Length          0009 (9)\n+10199E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10199E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1019D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1019D8   Length              0005 (5)\n+1019DA   Flags               01 (1) 'Modification'\n+1019DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1019DF LOCAL HEADER #380     04034B50 (67324752)\n+1019E3 Extract Zip Spec      14 (20) '2.0'\n+1019E4 Extract OS            00 (0) 'MS-DOS'\n+1019E5 General Purpose Flag  0000 (0)\n+1019E7 Compression Method    0000 (0) 'Stored'\n+1019E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1019ED CRC                   00000000 (0)\n+1019F1 Compressed Size       00000000 (0)\n+1019F5 Uncompressed Size     00000000 (0)\n+1019F9 Filename Length       006E (110)\n+1019FB Extra Length          0009 (9)\n+1019FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1019FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+101A6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+101A6D   Length              0005 (5)\n+101A6F   Flags               01 (1) 'Modification'\n+101A70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+101A74 LOCAL HEADER #381     04034B50 (67324752)\n+101A78 Extract Zip Spec      14 (20) '2.0'\n+101A79 Extract OS            00 (0) 'MS-DOS'\n+101A7A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+101A7C Compression Method    0000 (0) 'Stored'\n+101A7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+101A82 CRC                   00000000 (0)\n+101A86 Compressed Size       00000000 (0)\n+101A8A Uncompressed Size     00000000 (0)\n+101A8E Filename Length       0084 (132)\n+101A90 Extra Length          0009 (9)\n+101A92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x101AFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x101A92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-101B7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-101B81   Length              0005 (5)\n-101B83   Flags               01 (1) 'Modification'\n-101B84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-101B88 PAYLOAD\n-\n-106DB8 DATA DESCRIPTOR       08074B50 (134695760)\n-106DBC CRC                   CB05D09B (3406155931)\n-106DC0 Compressed Size       00005230 (21040)\n-106DC4 Uncompressed Size     00005230 (21040)\n-\n-106DC8 LOCAL HEADER #382     04034B50 (67324752)\n-106DCC Extract Zip Spec      14 (20) '2.0'\n-106DCD Extract OS            00 (0) 'MS-DOS'\n-106DCE General Purpose Flag  0000 (0)\n-106DD0 Compression Method    0000 (0) 'Stored'\n-106DD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106DD6 CRC                   00000000 (0)\n-106DDA Compressed Size       00000000 (0)\n-106DDE Uncompressed Size     00000000 (0)\n-106DE2 Filename Length       0033 (51)\n-106DE4 Extra Length          0009 (9)\n-106DE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106DE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106E19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106E1B   Length              0005 (5)\n-106E1D   Flags               01 (1) 'Modification'\n-106E1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-106E22 LOCAL HEADER #383     04034B50 (67324752)\n-106E26 Extract Zip Spec      14 (20) '2.0'\n-106E27 Extract OS            00 (0) 'MS-DOS'\n-106E28 General Purpose Flag  0000 (0)\n-106E2A Compression Method    0000 (0) 'Stored'\n-106E2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106E30 CRC                   00000000 (0)\n-106E34 Compressed Size       00000000 (0)\n-106E38 Uncompressed Size     00000000 (0)\n-106E3C Filename Length       003C (60)\n-106E3E Extra Length          0009 (9)\n-106E40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106E40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106E7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106E7E   Length              0005 (5)\n-106E80   Flags               01 (1) 'Modification'\n-106E81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-106E85 LOCAL HEADER #384     04034B50 (67324752)\n-106E89 Extract Zip Spec      14 (20) '2.0'\n-106E8A Extract OS            00 (0) 'MS-DOS'\n-106E8B General Purpose Flag  0000 (0)\n-106E8D Compression Method    0000 (0) 'Stored'\n-106E8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106E93 CRC                   00000000 (0)\n-106E97 Compressed Size       00000000 (0)\n-106E9B Uncompressed Size     00000000 (0)\n-106E9F Filename Length       0072 (114)\n-106EA1 Extra Length          0009 (9)\n-106EA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x106EA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-106F15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106F17   Length              0005 (5)\n-106F19   Flags               01 (1) 'Modification'\n-106F1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-106F1E LOCAL HEADER #385     04034B50 (67324752)\n-106F22 Extract Zip Spec      14 (20) '2.0'\n-106F23 Extract OS            00 (0) 'MS-DOS'\n-106F24 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-106F26 Compression Method    0000 (0) 'Stored'\n-106F28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-106F2C CRC                   00000000 (0)\n-106F30 Compressed Size       00000000 (0)\n-106F34 Uncompressed Size     00000000 (0)\n-106F38 Filename Length       0088 (136)\n-106F3A Extra Length          0009 (9)\n-106F3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+101B16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+101B18   Length              0005 (5)\n+101B1A   Flags               01 (1) 'Modification'\n+101B1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+101B1F PAYLOAD\n+\n+106D4F DATA DESCRIPTOR       08074B50 (134695760)\n+106D53 CRC                   CB05D09B (3406155931)\n+106D57 Compressed Size       00005230 (21040)\n+106D5B Uncompressed Size     00005230 (21040)\n+\n+106D5F LOCAL HEADER #382     04034B50 (67324752)\n+106D63 Extract Zip Spec      14 (20) '2.0'\n+106D64 Extract OS            00 (0) 'MS-DOS'\n+106D65 General Purpose Flag  0000 (0)\n+106D67 Compression Method    0000 (0) 'Stored'\n+106D69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106D6D CRC                   00000000 (0)\n+106D71 Compressed Size       00000000 (0)\n+106D75 Uncompressed Size     00000000 (0)\n+106D79 Filename Length       0033 (51)\n+106D7B Extra Length          0009 (9)\n+106D7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x106D7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+106DB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106DB2   Length              0005 (5)\n+106DB4   Flags               01 (1) 'Modification'\n+106DB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+106DB9 LOCAL HEADER #383     04034B50 (67324752)\n+106DBD Extract Zip Spec      14 (20) '2.0'\n+106DBE Extract OS            00 (0) 'MS-DOS'\n+106DBF General Purpose Flag  0000 (0)\n+106DC1 Compression Method    0000 (0) 'Stored'\n+106DC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106DC7 CRC                   00000000 (0)\n+106DCB Compressed Size       00000000 (0)\n+106DCF Uncompressed Size     00000000 (0)\n+106DD3 Filename Length       003C (60)\n+106DD5 Extra Length          0009 (9)\n+106DD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x106DD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+106E13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106E15   Length              0005 (5)\n+106E17   Flags               01 (1) 'Modification'\n+106E18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+106E1C LOCAL HEADER #384     04034B50 (67324752)\n+106E20 Extract Zip Spec      14 (20) '2.0'\n+106E21 Extract OS            00 (0) 'MS-DOS'\n+106E22 General Purpose Flag  0000 (0)\n+106E24 Compression Method    0000 (0) 'Stored'\n+106E26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106E2A CRC                   00000000 (0)\n+106E2E Compressed Size       00000000 (0)\n+106E32 Uncompressed Size     00000000 (0)\n+106E36 Filename Length       0072 (114)\n+106E38 Extra Length          0009 (9)\n+106E3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x106E3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+106EAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106EAE   Length              0005 (5)\n+106EB0   Flags               01 (1) 'Modification'\n+106EB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+106EB5 LOCAL HEADER #385     04034B50 (67324752)\n+106EB9 Extract Zip Spec      14 (20) '2.0'\n+106EBA Extract OS            00 (0) 'MS-DOS'\n+106EBB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+106EBD Compression Method    0000 (0) 'Stored'\n+106EBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+106EC3 CRC                   00000000 (0)\n+106EC7 Compressed Size       00000000 (0)\n+106ECB Uncompressed Size     00000000 (0)\n+106ECF Filename Length       0088 (136)\n+106ED1 Extra Length          0009 (9)\n+106ED3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x106F3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x106ED3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-106FC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-106FC6   Length              0005 (5)\n-106FC8   Flags               01 (1) 'Modification'\n-106FC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-106FCD PAYLOAD\n-\n-1078D1 DATA DESCRIPTOR       08074B50 (134695760)\n-1078D5 CRC                   17E2323C (400699964)\n-1078D9 Compressed Size       00000904 (2308)\n-1078DD Uncompressed Size     00000904 (2308)\n-\n-1078E1 LOCAL HEADER #386     04034B50 (67324752)\n-1078E5 Extract Zip Spec      14 (20) '2.0'\n-1078E6 Extract OS            00 (0) 'MS-DOS'\n-1078E7 General Purpose Flag  0000 (0)\n-1078E9 Compression Method    0000 (0) 'Stored'\n-1078EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1078EF CRC                   00000000 (0)\n-1078F3 Compressed Size       00000000 (0)\n-1078F7 Uncompressed Size     00000000 (0)\n-1078FB Filename Length       0030 (48)\n-1078FD Extra Length          0009 (9)\n-1078FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1078FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10792F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-107931   Length              0005 (5)\n-107933   Flags               01 (1) 'Modification'\n-107934   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107938 LOCAL HEADER #387     04034B50 (67324752)\n-10793C Extract Zip Spec      14 (20) '2.0'\n-10793D Extract OS            00 (0) 'MS-DOS'\n-10793E General Purpose Flag  0000 (0)\n-107940 Compression Method    0000 (0) 'Stored'\n-107942 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107946 CRC                   00000000 (0)\n-10794A Compressed Size       00000000 (0)\n-10794E Uncompressed Size     00000000 (0)\n-107952 Filename Length       0039 (57)\n-107954 Extra Length          0009 (9)\n-107956 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x107956: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10798F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-107991   Length              0005 (5)\n-107993   Flags               01 (1) 'Modification'\n-107994   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107998 LOCAL HEADER #388     04034B50 (67324752)\n-10799C Extract Zip Spec      14 (20) '2.0'\n-10799D Extract OS            00 (0) 'MS-DOS'\n-10799E General Purpose Flag  0000 (0)\n-1079A0 Compression Method    0000 (0) 'Stored'\n-1079A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1079A6 CRC                   00000000 (0)\n-1079AA Compressed Size       00000000 (0)\n-1079AE Uncompressed Size     00000000 (0)\n-1079B2 Filename Length       007D (125)\n-1079B4 Extra Length          0009 (9)\n-1079B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1079B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-107A33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-107A35   Length              0005 (5)\n-107A37   Flags               01 (1) 'Modification'\n-107A38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-107A3C LOCAL HEADER #389     04034B50 (67324752)\n-107A40 Extract Zip Spec      14 (20) '2.0'\n-107A41 Extract OS            00 (0) 'MS-DOS'\n-107A42 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-107A44 Compression Method    0000 (0) 'Stored'\n-107A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-107A4A CRC                   00000000 (0)\n-107A4E Compressed Size       00000000 (0)\n-107A52 Uncompressed Size     00000000 (0)\n-107A56 Filename Length       0093 (147)\n-107A58 Extra Length          0009 (9)\n-107A5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+106F5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+106F5D   Length              0005 (5)\n+106F5F   Flags               01 (1) 'Modification'\n+106F60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+106F64 PAYLOAD\n+\n+107868 DATA DESCRIPTOR       08074B50 (134695760)\n+10786C CRC                   17E2323C (400699964)\n+107870 Compressed Size       00000904 (2308)\n+107874 Uncompressed Size     00000904 (2308)\n+\n+107878 LOCAL HEADER #386     04034B50 (67324752)\n+10787C Extract Zip Spec      14 (20) '2.0'\n+10787D Extract OS            00 (0) 'MS-DOS'\n+10787E General Purpose Flag  0000 (0)\n+107880 Compression Method    0000 (0) 'Stored'\n+107882 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+107886 CRC                   00000000 (0)\n+10788A Compressed Size       00000000 (0)\n+10788E Uncompressed Size     00000000 (0)\n+107892 Filename Length       0030 (48)\n+107894 Extra Length          0009 (9)\n+107896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x107896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1078C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1078C8   Length              0005 (5)\n+1078CA   Flags               01 (1) 'Modification'\n+1078CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1078CF LOCAL HEADER #387     04034B50 (67324752)\n+1078D3 Extract Zip Spec      14 (20) '2.0'\n+1078D4 Extract OS            00 (0) 'MS-DOS'\n+1078D5 General Purpose Flag  0000 (0)\n+1078D7 Compression Method    0000 (0) 'Stored'\n+1078D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1078DD CRC                   00000000 (0)\n+1078E1 Compressed Size       00000000 (0)\n+1078E5 Uncompressed Size     00000000 (0)\n+1078E9 Filename Length       0039 (57)\n+1078EB Extra Length          0009 (9)\n+1078ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1078ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+107926 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+107928   Length              0005 (5)\n+10792A   Flags               01 (1) 'Modification'\n+10792B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10792F LOCAL HEADER #388     04034B50 (67324752)\n+107933 Extract Zip Spec      14 (20) '2.0'\n+107934 Extract OS            00 (0) 'MS-DOS'\n+107935 General Purpose Flag  0000 (0)\n+107937 Compression Method    0000 (0) 'Stored'\n+107939 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10793D CRC                   00000000 (0)\n+107941 Compressed Size       00000000 (0)\n+107945 Uncompressed Size     00000000 (0)\n+107949 Filename Length       007D (125)\n+10794B Extra Length          0009 (9)\n+10794D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10794D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1079CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1079CC   Length              0005 (5)\n+1079CE   Flags               01 (1) 'Modification'\n+1079CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1079D3 LOCAL HEADER #389     04034B50 (67324752)\n+1079D7 Extract Zip Spec      14 (20) '2.0'\n+1079D8 Extract OS            00 (0) 'MS-DOS'\n+1079D9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1079DB Compression Method    0000 (0) 'Stored'\n+1079DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1079E1 CRC                   00000000 (0)\n+1079E5 Compressed Size       00000000 (0)\n+1079E9 Uncompressed Size     00000000 (0)\n+1079ED Filename Length       0093 (147)\n+1079EF Extra Length          0009 (9)\n+1079F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x107A5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1079F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-107AED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-107AEF   Length              0005 (5)\n-107AF1   Flags               01 (1) 'Modification'\n-107AF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-107AF6 PAYLOAD\n-\n-108B2C DATA DESCRIPTOR       08074B50 (134695760)\n-108B30 CRC                   CC28EBBC (3425233852)\n-108B34 Compressed Size       00001036 (4150)\n-108B38 Uncompressed Size     00001036 (4150)\n-\n-108B3C LOCAL HEADER #390     04034B50 (67324752)\n-108B40 Extract Zip Spec      14 (20) '2.0'\n-108B41 Extract OS            00 (0) 'MS-DOS'\n-108B42 General Purpose Flag  0000 (0)\n-108B44 Compression Method    0000 (0) 'Stored'\n-108B46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108B4A CRC                   00000000 (0)\n-108B4E Compressed Size       00000000 (0)\n-108B52 Uncompressed Size     00000000 (0)\n-108B56 Filename Length       0031 (49)\n-108B58 Extra Length          0009 (9)\n-108B5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x108B5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-108B8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108B8D   Length              0005 (5)\n-108B8F   Flags               01 (1) 'Modification'\n-108B90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-108B94 LOCAL HEADER #391     04034B50 (67324752)\n-108B98 Extract Zip Spec      14 (20) '2.0'\n-108B99 Extract OS            00 (0) 'MS-DOS'\n-108B9A General Purpose Flag  0000 (0)\n-108B9C Compression Method    0000 (0) 'Stored'\n-108B9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108BA2 CRC                   00000000 (0)\n-108BA6 Compressed Size       00000000 (0)\n-108BAA Uncompressed Size     00000000 (0)\n-108BAE Filename Length       003A (58)\n-108BB0 Extra Length          0009 (9)\n-108BB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x108BB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-108BEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108BEE   Length              0005 (5)\n-108BF0   Flags               01 (1) 'Modification'\n-108BF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-108BF5 LOCAL HEADER #392     04034B50 (67324752)\n-108BF9 Extract Zip Spec      14 (20) '2.0'\n-108BFA Extract OS            00 (0) 'MS-DOS'\n-108BFB General Purpose Flag  0000 (0)\n-108BFD Compression Method    0000 (0) 'Stored'\n-108BFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108C03 CRC                   00000000 (0)\n-108C07 Compressed Size       00000000 (0)\n-108C0B Uncompressed Size     00000000 (0)\n-108C0F Filename Length       006E (110)\n-108C11 Extra Length          0009 (9)\n-108C13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x108C13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-108C81 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108C83   Length              0005 (5)\n-108C85   Flags               01 (1) 'Modification'\n-108C86   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-108C8A LOCAL HEADER #393     04034B50 (67324752)\n-108C8E Extract Zip Spec      14 (20) '2.0'\n-108C8F Extract OS            00 (0) 'MS-DOS'\n-108C90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-108C92 Compression Method    0000 (0) 'Stored'\n-108C94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-108C98 CRC                   00000000 (0)\n-108C9C Compressed Size       00000000 (0)\n-108CA0 Uncompressed Size     00000000 (0)\n-108CA4 Filename Length       0084 (132)\n-108CA6 Extra Length          0009 (9)\n-108CA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+107A84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+107A86   Length              0005 (5)\n+107A88   Flags               01 (1) 'Modification'\n+107A89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+107A8D PAYLOAD\n+\n+108AC3 DATA DESCRIPTOR       08074B50 (134695760)\n+108AC7 CRC                   CC28EBBC (3425233852)\n+108ACB Compressed Size       00001036 (4150)\n+108ACF Uncompressed Size     00001036 (4150)\n+\n+108AD3 LOCAL HEADER #390     04034B50 (67324752)\n+108AD7 Extract Zip Spec      14 (20) '2.0'\n+108AD8 Extract OS            00 (0) 'MS-DOS'\n+108AD9 General Purpose Flag  0000 (0)\n+108ADB Compression Method    0000 (0) 'Stored'\n+108ADD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108AE1 CRC                   00000000 (0)\n+108AE5 Compressed Size       00000000 (0)\n+108AE9 Uncompressed Size     00000000 (0)\n+108AED Filename Length       0031 (49)\n+108AEF Extra Length          0009 (9)\n+108AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x108AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+108B22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108B24   Length              0005 (5)\n+108B26   Flags               01 (1) 'Modification'\n+108B27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+108B2B LOCAL HEADER #391     04034B50 (67324752)\n+108B2F Extract Zip Spec      14 (20) '2.0'\n+108B30 Extract OS            00 (0) 'MS-DOS'\n+108B31 General Purpose Flag  0000 (0)\n+108B33 Compression Method    0000 (0) 'Stored'\n+108B35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108B39 CRC                   00000000 (0)\n+108B3D Compressed Size       00000000 (0)\n+108B41 Uncompressed Size     00000000 (0)\n+108B45 Filename Length       003A (58)\n+108B47 Extra Length          0009 (9)\n+108B49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x108B49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+108B83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108B85   Length              0005 (5)\n+108B87   Flags               01 (1) 'Modification'\n+108B88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+108B8C LOCAL HEADER #392     04034B50 (67324752)\n+108B90 Extract Zip Spec      14 (20) '2.0'\n+108B91 Extract OS            00 (0) 'MS-DOS'\n+108B92 General Purpose Flag  0000 (0)\n+108B94 Compression Method    0000 (0) 'Stored'\n+108B96 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108B9A CRC                   00000000 (0)\n+108B9E Compressed Size       00000000 (0)\n+108BA2 Uncompressed Size     00000000 (0)\n+108BA6 Filename Length       006E (110)\n+108BA8 Extra Length          0009 (9)\n+108BAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x108BAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+108C18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108C1A   Length              0005 (5)\n+108C1C   Flags               01 (1) 'Modification'\n+108C1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+108C21 LOCAL HEADER #393     04034B50 (67324752)\n+108C25 Extract Zip Spec      14 (20) '2.0'\n+108C26 Extract OS            00 (0) 'MS-DOS'\n+108C27 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+108C29 Compression Method    0000 (0) 'Stored'\n+108C2B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+108C2F CRC                   00000000 (0)\n+108C33 Compressed Size       00000000 (0)\n+108C37 Uncompressed Size     00000000 (0)\n+108C3B Filename Length       0084 (132)\n+108C3D Extra Length          0009 (9)\n+108C3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x108CA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x108C3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-108D2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-108D2E   Length              0005 (5)\n-108D30   Flags               01 (1) 'Modification'\n-108D31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-108D35 PAYLOAD\n-\n-109809 DATA DESCRIPTOR       08074B50 (134695760)\n-10980D CRC                   3FC95820 (1070159904)\n-109811 Compressed Size       00000AD4 (2772)\n-109815 Uncompressed Size     00000AD4 (2772)\n-\n-109819 LOCAL HEADER #394     04034B50 (67324752)\n-10981D Extract Zip Spec      14 (20) '2.0'\n-10981E Extract OS            00 (0) 'MS-DOS'\n-10981F General Purpose Flag  0000 (0)\n-109821 Compression Method    0000 (0) 'Stored'\n-109823 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109827 CRC                   00000000 (0)\n-10982B Compressed Size       00000000 (0)\n-10982F Uncompressed Size     00000000 (0)\n-109833 Filename Length       0026 (38)\n-109835 Extra Length          0009 (9)\n-109837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10985D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10985F   Length              0005 (5)\n-109861   Flags               01 (1) 'Modification'\n-109862   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-109866 LOCAL HEADER #395     04034B50 (67324752)\n-10986A Extract Zip Spec      14 (20) '2.0'\n-10986B Extract OS            00 (0) 'MS-DOS'\n-10986C General Purpose Flag  0000 (0)\n-10986E Compression Method    0000 (0) 'Stored'\n-109870 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-109874 CRC                   00000000 (0)\n-109878 Compressed Size       00000000 (0)\n-10987C Uncompressed Size     00000000 (0)\n-109880 Filename Length       002F (47)\n-109882 Extra Length          0009 (9)\n-109884 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x109884: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1098B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1098B5   Length              0005 (5)\n-1098B7   Flags               01 (1) 'Modification'\n-1098B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1098BC LOCAL HEADER #396     04034B50 (67324752)\n-1098C0 Extract Zip Spec      14 (20) '2.0'\n-1098C1 Extract OS            00 (0) 'MS-DOS'\n-1098C2 General Purpose Flag  0000 (0)\n-1098C4 Compression Method    0000 (0) 'Stored'\n-1098C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1098CA CRC                   00000000 (0)\n-1098CE Compressed Size       00000000 (0)\n-1098D2 Uncompressed Size     00000000 (0)\n-1098D6 Filename Length       005D (93)\n-1098D8 Extra Length          0009 (9)\n-1098DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1098DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-109937 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-109939   Length              0005 (5)\n-10993B   Flags               01 (1) 'Modification'\n-10993C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-109940 LOCAL HEADER #397     04034B50 (67324752)\n-109944 Extract Zip Spec      14 (20) '2.0'\n-109945 Extract OS            00 (0) 'MS-DOS'\n-109946 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-109948 Compression Method    0000 (0) 'Stored'\n-10994A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10994E CRC                   00000000 (0)\n-109952 Compressed Size       00000000 (0)\n-109956 Uncompressed Size     00000000 (0)\n-10995A Filename Length       0073 (115)\n-10995C Extra Length          0009 (9)\n-10995E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10995E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1099D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1099D3   Length              0005 (5)\n-1099D5   Flags               01 (1) 'Modification'\n-1099D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1099DA PAYLOAD\n-\n-10A709 DATA DESCRIPTOR       08074B50 (134695760)\n-10A70D CRC                   41CBDE11 (1103879697)\n-10A711 Compressed Size       00000D2F (3375)\n-10A715 Uncompressed Size     00000D2F (3375)\n-\n-10A719 LOCAL HEADER #398     04034B50 (67324752)\n-10A71D Extract Zip Spec      14 (20) '2.0'\n-10A71E Extract OS            00 (0) 'MS-DOS'\n-10A71F General Purpose Flag  0000 (0)\n-10A721 Compression Method    0000 (0) 'Stored'\n-10A723 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10A727 CRC                   00000000 (0)\n-10A72B Compressed Size       00000000 (0)\n-10A72F Uncompressed Size     00000000 (0)\n-10A733 Filename Length       0063 (99)\n-10A735 Extra Length          0009 (9)\n-10A737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10A737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10A79A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10A79C   Length              0005 (5)\n-10A79E   Flags               01 (1) 'Modification'\n-10A79F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10A7A3 LOCAL HEADER #399     04034B50 (67324752)\n-10A7A7 Extract Zip Spec      14 (20) '2.0'\n-10A7A8 Extract OS            00 (0) 'MS-DOS'\n-10A7A9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10A7AB Compression Method    0000 (0) 'Stored'\n-10A7AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10A7B1 CRC                   00000000 (0)\n-10A7B5 Compressed Size       00000000 (0)\n-10A7B9 Uncompressed Size     00000000 (0)\n-10A7BD Filename Length       0079 (121)\n-10A7BF Extra Length          0009 (9)\n-10A7C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10A7C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10A83A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10A83C   Length              0005 (5)\n-10A83E   Flags               01 (1) 'Modification'\n-10A83F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10A843 PAYLOAD\n-\n-10C4BC DATA DESCRIPTOR       08074B50 (134695760)\n-10C4C0 CRC                   1D768ED5 (494309077)\n-10C4C4 Compressed Size       00001C79 (7289)\n-10C4C8 Uncompressed Size     00001C79 (7289)\n-\n-10C4CC LOCAL HEADER #400     04034B50 (67324752)\n-10C4D0 Extract Zip Spec      14 (20) '2.0'\n-10C4D1 Extract OS            00 (0) 'MS-DOS'\n-10C4D2 General Purpose Flag  0000 (0)\n-10C4D4 Compression Method    0000 (0) 'Stored'\n-10C4D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10C4DA CRC                   00000000 (0)\n-10C4DE Compressed Size       00000000 (0)\n-10C4E2 Uncompressed Size     00000000 (0)\n-10C4E6 Filename Length       002F (47)\n-10C4E8 Extra Length          0009 (9)\n-10C4EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10C4EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10C519 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10C51B   Length              0005 (5)\n-10C51D   Flags               01 (1) 'Modification'\n-10C51E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10C522 LOCAL HEADER #401     04034B50 (67324752)\n-10C526 Extract Zip Spec      14 (20) '2.0'\n-10C527 Extract OS            00 (0) 'MS-DOS'\n-10C528 General Purpose Flag  0000 (0)\n-10C52A Compression Method    0000 (0) 'Stored'\n-10C52C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10C530 CRC                   00000000 (0)\n-10C534 Compressed Size       00000000 (0)\n-10C538 Uncompressed Size     00000000 (0)\n-10C53C Filename Length       0038 (56)\n-10C53E Extra Length          0009 (9)\n-10C540 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10C540: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10C578 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10C57A   Length              0005 (5)\n-10C57C   Flags               01 (1) 'Modification'\n-10C57D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10C581 LOCAL HEADER #402     04034B50 (67324752)\n-10C585 Extract Zip Spec      14 (20) '2.0'\n-10C586 Extract OS            00 (0) 'MS-DOS'\n-10C587 General Purpose Flag  0000 (0)\n-10C589 Compression Method    0000 (0) 'Stored'\n-10C58B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10C58F CRC                   00000000 (0)\n-10C593 Compressed Size       00000000 (0)\n-10C597 Uncompressed Size     00000000 (0)\n-10C59B Filename Length       006B (107)\n-10C59D Extra Length          0009 (9)\n-10C59F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10C59F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10C60A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10C60C   Length              0005 (5)\n-10C60E   Flags               01 (1) 'Modification'\n-10C60F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10C613 LOCAL HEADER #403     04034B50 (67324752)\n-10C617 Extract Zip Spec      14 (20) '2.0'\n-10C618 Extract OS            00 (0) 'MS-DOS'\n-10C619 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10C61B Compression Method    0000 (0) 'Stored'\n-10C61D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10C621 CRC                   00000000 (0)\n-10C625 Compressed Size       00000000 (0)\n-10C629 Uncompressed Size     00000000 (0)\n-10C62D Filename Length       0081 (129)\n-10C62F Extra Length          0009 (9)\n-10C631 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10C631: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10C6B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10C6B4   Length              0005 (5)\n-10C6B6   Flags               01 (1) 'Modification'\n-10C6B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10C6BB PAYLOAD\n-\n-10E3D4 DATA DESCRIPTOR       08074B50 (134695760)\n-10E3D8 CRC                   7A85C658 (2055587416)\n-10E3DC Compressed Size       00001D19 (7449)\n-10E3E0 Uncompressed Size     00001D19 (7449)\n-\n-10E3E4 LOCAL HEADER #404     04034B50 (67324752)\n-10E3E8 Extract Zip Spec      14 (20) '2.0'\n-10E3E9 Extract OS            00 (0) 'MS-DOS'\n-10E3EA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-10E3EC Compression Method    0000 (0) 'Stored'\n-10E3EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10E3F2 CRC                   00000000 (0)\n-10E3F6 Compressed Size       00000000 (0)\n-10E3FA Uncompressed Size     00000000 (0)\n-10E3FE Filename Length       001A (26)\n-10E400 Extra Length          0009 (9)\n-10E402 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10E402: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10E41C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10E41E   Length              0005 (5)\n-10E420   Flags               01 (1) 'Modification'\n-10E421   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10E425 PAYLOAD\n-\n-511FD0 DATA DESCRIPTOR       08074B50 (134695760)\n-511FD4 CRC                   C398FE25 (3281583653)\n-511FD8 Compressed Size       00403BAB (4209579)\n-511FDC Uncompressed Size     00403BAB (4209579)\n-\n-511FE0 CENTRAL HEADER #1     02014B50 (33639248)\n-511FE4 Created Zip Spec      14 (20) '2.0'\n-511FE5 Created OS            00 (0) 'MS-DOS'\n-511FE6 Extract Zip Spec      14 (20) '2.0'\n-511FE7 Extract OS            00 (0) 'MS-DOS'\n-511FE8 General Purpose Flag  0000 (0)\n-511FEA Compression Method    0000 (0) 'Stored'\n-511FEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-511FF0 CRC                   00000000 (0)\n-511FF4 Compressed Size       00000000 (0)\n-511FF8 Uncompressed Size     00000000 (0)\n-511FFC Filename Length       0009 (9)\n-511FFE Extra Length          0009 (9)\n-512000 Comment Length        0000 (0)\n-512002 Disk Start            0000 (0)\n-512004 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512006 Ext File Attributes   00000000 (0)\n-51200A Local Header Offset   00000000 (0)\n-51200E Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x51200E: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-512017 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512019   Length              0005 (5)\n-51201B   Flags               01 (1) 'Modification'\n-51201C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512020 CENTRAL HEADER #2     02014B50 (33639248)\n-512024 Created Zip Spec      14 (20) '2.0'\n-512025 Created OS            00 (0) 'MS-DOS'\n-512026 Extract Zip Spec      14 (20) '2.0'\n-512027 Extract OS            00 (0) 'MS-DOS'\n-512028 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51202A Compression Method    0000 (0) 'Stored'\n-51202C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512030 CRC                   49E1B674 (1239529076)\n-512034 Compressed Size       00012B5D (76637)\n-512038 Uncompressed Size     00012B5D (76637)\n-51203C Filename Length       0015 (21)\n-51203E Extra Length          0009 (9)\n-512040 Comment Length        0000 (0)\n-512042 Disk Start            0000 (0)\n-512044 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512046 Ext File Attributes   00000000 (0)\n-51204A Local Header Offset   00000030 (48)\n-51204E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51204E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512063 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512065   Length              0005 (5)\n-512067   Flags               01 (1) 'Modification'\n-512068   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51206C CENTRAL HEADER #3     02014B50 (33639248)\n-512070 Created Zip Spec      14 (20) '2.0'\n-512071 Created OS            00 (0) 'MS-DOS'\n-512072 Extract Zip Spec      14 (20) '2.0'\n-512073 Extract OS            00 (0) 'MS-DOS'\n-512074 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512076 Compression Method    0000 (0) 'Stored'\n-512078 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51207C CRC                   86E2B4B4 (2263004340)\n-512080 Compressed Size       00002C5E (11358)\n-512084 Uncompressed Size     00002C5E (11358)\n-512088 Filename Length       0010 (16)\n-51208A Extra Length          0009 (9)\n-51208C Comment Length        0000 (0)\n-51208E Disk Start            0000 (0)\n-512090 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512092 Ext File Attributes   00000000 (0)\n-512096 Local Header Offset   00012BD9 (76761)\n-51209A Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51209A: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5120AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5120AC   Length              0005 (5)\n-5120AE   Flags               01 (1) 'Modification'\n-5120AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5120B3 CENTRAL HEADER #4     02014B50 (33639248)\n-5120B7 Created Zip Spec      14 (20) '2.0'\n-5120B8 Created OS            00 (0) 'MS-DOS'\n-5120B9 Extract Zip Spec      14 (20) '2.0'\n-5120BA Extract OS            00 (0) 'MS-DOS'\n-5120BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5120BD Compression Method    0000 (0) 'Stored'\n-5120BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5120C3 CRC                   D55ACFD6 (3579498454)\n-5120C7 Compressed Size       00000107 (263)\n-5120CB Uncompressed Size     00000107 (263)\n-5120CF Filename Length       0014 (20)\n-5120D1 Extra Length          0009 (9)\n-5120D3 Comment Length        0000 (0)\n-5120D5 Disk Start            0000 (0)\n-5120D7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5120D9 Ext File Attributes   00000000 (0)\n-5120DD Local Header Offset   0001587E (88190)\n-5120E1 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5120E1: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5120F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5120F7   Length              0005 (5)\n-5120F9   Flags               01 (1) 'Modification'\n-5120FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5120FE CENTRAL HEADER #5     02014B50 (33639248)\n-512102 Created Zip Spec      14 (20) '2.0'\n-512103 Created OS            00 (0) 'MS-DOS'\n-512104 Extract Zip Spec      14 (20) '2.0'\n-512105 Extract OS            00 (0) 'MS-DOS'\n-512106 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512108 Compression Method    0000 (0) 'Stored'\n-51210A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51210E CRC                   91A82808 (2443716616)\n-512112 Compressed Size       000000A0 (160)\n-512116 Uncompressed Size     000000A0 (160)\n-51211A Filename Length       000F (15)\n-51211C Extra Length          0009 (9)\n-51211E Comment Length        0000 (0)\n-512120 Disk Start            0000 (0)\n-512122 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512124 Ext File Attributes   00000000 (0)\n-512128 Local Header Offset   000159D0 (88528)\n-51212C Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51212C: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51213B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51213D   Length              0005 (5)\n-51213F   Flags               01 (1) 'Modification'\n-512140   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512144 CENTRAL HEADER #6     02014B50 (33639248)\n-512148 Created Zip Spec      14 (20) '2.0'\n-512149 Created OS            00 (0) 'MS-DOS'\n-51214A Extract Zip Spec      14 (20) '2.0'\n-51214B Extract OS            00 (0) 'MS-DOS'\n-51214C General Purpose Flag  0000 (0)\n-51214E Compression Method    0000 (0) 'Stored'\n-512150 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512154 CRC                   00000000 (0)\n-512158 Compressed Size       00000000 (0)\n-51215C Uncompressed Size     00000000 (0)\n-512160 Filename Length       000F (15)\n-512162 Extra Length          0009 (9)\n-512164 Comment Length        0000 (0)\n-512166 Disk Start            0000 (0)\n-512168 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51216A Ext File Attributes   00000000 (0)\n-51216E Local Header Offset   00015AB6 (88758)\n-512172 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512172: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512181 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512183   Length              0005 (5)\n-512185   Flags               01 (1) 'Modification'\n-512186   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51218A CENTRAL HEADER #7     02014B50 (33639248)\n-51218E Created Zip Spec      14 (20) '2.0'\n-51218F Created OS            00 (0) 'MS-DOS'\n-512190 Extract Zip Spec      14 (20) '2.0'\n-512191 Extract OS            00 (0) 'MS-DOS'\n-512192 General Purpose Flag  0000 (0)\n-512194 Compression Method    0000 (0) 'Stored'\n-512196 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51219A CRC                   00000000 (0)\n-51219E Compressed Size       00000000 (0)\n-5121A2 Uncompressed Size     00000000 (0)\n-5121A6 Filename Length       001F (31)\n-5121A8 Extra Length          0009 (9)\n-5121AA Comment Length        0000 (0)\n-5121AC Disk Start            0000 (0)\n-5121AE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5121B0 Ext File Attributes   00000000 (0)\n-5121B4 Local Header Offset   00015AEC (88812)\n-5121B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5121B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5121D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5121D9   Length              0005 (5)\n-5121DB   Flags               01 (1) 'Modification'\n-5121DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5121E0 CENTRAL HEADER #8     02014B50 (33639248)\n-5121E4 Created Zip Spec      14 (20) '2.0'\n-5121E5 Created OS            00 (0) 'MS-DOS'\n-5121E6 Extract Zip Spec      14 (20) '2.0'\n-5121E7 Extract OS            00 (0) 'MS-DOS'\n-5121E8 General Purpose Flag  0000 (0)\n-5121EA Compression Method    0000 (0) 'Stored'\n-5121EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5121F0 CRC                   00000000 (0)\n-5121F4 Compressed Size       00000000 (0)\n-5121F8 Uncompressed Size     00000000 (0)\n-5121FC Filename Length       0035 (53)\n-5121FE Extra Length          0009 (9)\n-512200 Comment Length        0000 (0)\n-512202 Disk Start            0000 (0)\n-512204 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512206 Ext File Attributes   00000000 (0)\n-51220A Local Header Offset   00015B32 (88882)\n-51220E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51220E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512243 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512245   Length              0005 (5)\n-512247   Flags               01 (1) 'Modification'\n-512248   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51224C CENTRAL HEADER #9     02014B50 (33639248)\n-512250 Created Zip Spec      14 (20) '2.0'\n-512251 Created OS            00 (0) 'MS-DOS'\n-512252 Extract Zip Spec      14 (20) '2.0'\n-512253 Extract OS            00 (0) 'MS-DOS'\n-512254 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512256 Compression Method    0000 (0) 'Stored'\n-512258 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51225C CRC                   00000000 (0)\n-512260 Compressed Size       00000000 (0)\n-512264 Uncompressed Size     00000000 (0)\n-512268 Filename Length       0043 (67)\n-51226A Extra Length          0009 (9)\n-51226C Comment Length        0000 (0)\n-51226E Disk Start            0000 (0)\n-512270 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512272 Ext File Attributes   00000000 (0)\n-512276 Local Header Offset   00015B8E (88974)\n-51227A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51227A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5122BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5122BF   Length              0005 (5)\n-5122C1   Flags               01 (1) 'Modification'\n-5122C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5122C6 CENTRAL HEADER #10    02014B50 (33639248)\n-5122CA Created Zip Spec      14 (20) '2.0'\n-5122CB Created OS            00 (0) 'MS-DOS'\n-5122CC Extract Zip Spec      14 (20) '2.0'\n-5122CD Extract OS            00 (0) 'MS-DOS'\n-5122CE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5122D0 Compression Method    0000 (0) 'Stored'\n-5122D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5122D6 CRC                   1814D611 (404018705)\n-5122DA Compressed Size       00001EAA (7850)\n-5122DE Uncompressed Size     00001EAA (7850)\n-5122E2 Filename Length       003C (60)\n-5122E4 Extra Length          0009 (9)\n-5122E6 Comment Length        0000 (0)\n-5122E8 Disk Start            0000 (0)\n-5122EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5122EC Ext File Attributes   00000000 (0)\n-5122F0 Local Header Offset   00015C08 (89096)\n-5122F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5122F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512330 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512332   Length              0005 (5)\n-512334   Flags               01 (1) 'Modification'\n-512335   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512339 CENTRAL HEADER #11    02014B50 (33639248)\n-51233D Created Zip Spec      14 (20) '2.0'\n-51233E Created OS            00 (0) 'MS-DOS'\n-51233F Extract Zip Spec      14 (20) '2.0'\n-512340 Extract OS            00 (0) 'MS-DOS'\n-512341 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512343 Compression Method    0000 (0) 'Stored'\n-512345 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512349 CRC                   A60F7060 (2786029664)\n-51234D Compressed Size       0000050D (1293)\n-512351 Uncompressed Size     0000050D (1293)\n-512355 Filename Length       0010 (16)\n-512357 Extra Length          0009 (9)\n-512359 Comment Length        0000 (0)\n-51235B Disk Start            0000 (0)\n-51235D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51235F Ext File Attributes   00000000 (0)\n-512363 Local Header Offset   00017B25 (97061)\n-512367 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512367: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512377 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512379   Length              0005 (5)\n-51237B   Flags               01 (1) 'Modification'\n-51237C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512380 CENTRAL HEADER #12    02014B50 (33639248)\n-512384 Created Zip Spec      14 (20) '2.0'\n-512385 Created OS            00 (0) 'MS-DOS'\n-512386 Extract Zip Spec      14 (20) '2.0'\n-512387 Extract OS            00 (0) 'MS-DOS'\n-512388 General Purpose Flag  0000 (0)\n-51238A Compression Method    0000 (0) 'Stored'\n-51238C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512390 CRC                   00000000 (0)\n-512394 Compressed Size       00000000 (0)\n-512398 Uncompressed Size     00000000 (0)\n-51239C Filename Length       0005 (5)\n-51239E Extra Length          0009 (9)\n-5123A0 Comment Length        0000 (0)\n-5123A2 Disk Start            0000 (0)\n-5123A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5123A6 Ext File Attributes   00000000 (0)\n-5123AA Local Header Offset   00018079 (98425)\n-5123AE Filename              'XXXXX'\n-#\n-# WARNING: Offset 0x5123AE: Filename 'XXXXX'\n-#          Zero length filename\n-#\n-5123B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5123B5   Length              0005 (5)\n-5123B7   Flags               01 (1) 'Modification'\n-5123B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5123BC CENTRAL HEADER #13    02014B50 (33639248)\n-5123C0 Created Zip Spec      14 (20) '2.0'\n-5123C1 Created OS            00 (0) 'MS-DOS'\n-5123C2 Extract Zip Spec      14 (20) '2.0'\n-5123C3 Extract OS            00 (0) 'MS-DOS'\n-5123C4 General Purpose Flag  0000 (0)\n-5123C6 Compression Method    0000 (0) 'Stored'\n-5123C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5123CC CRC                   00000000 (0)\n-5123D0 Compressed Size       00000000 (0)\n-5123D4 Uncompressed Size     00000000 (0)\n-5123D8 Filename Length       0015 (21)\n-5123DA Extra Length          0009 (9)\n-5123DC Comment Length        0000 (0)\n-5123DE Disk Start            0000 (0)\n-5123E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5123E2 Ext File Attributes   00000000 (0)\n-5123E6 Local Header Offset   000180A5 (98469)\n-5123EA Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5123EA: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5123FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512401   Length              0005 (5)\n-512403   Flags               01 (1) 'Modification'\n-512404   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512408 CENTRAL HEADER #14    02014B50 (33639248)\n-51240C Created Zip Spec      14 (20) '2.0'\n-51240D Created OS            00 (0) 'MS-DOS'\n-51240E Extract Zip Spec      14 (20) '2.0'\n-51240F Extract OS            00 (0) 'MS-DOS'\n-512410 General Purpose Flag  0000 (0)\n-512412 Compression Method    0000 (0) 'Stored'\n-512414 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512418 CRC                   00000000 (0)\n-51241C Compressed Size       00000000 (0)\n-512420 Uncompressed Size     00000000 (0)\n-512424 Filename Length       0027 (39)\n-512426 Extra Length          0009 (9)\n-512428 Comment Length        0000 (0)\n-51242A Disk Start            0000 (0)\n-51242C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51242E Ext File Attributes   00000000 (0)\n-512432 Local Header Offset   000180E1 (98529)\n-512436 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512436: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51245D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51245F   Length              0005 (5)\n-512461   Flags               01 (1) 'Modification'\n-512462   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512466 CENTRAL HEADER #15    02014B50 (33639248)\n-51246A Created Zip Spec      14 (20) '2.0'\n-51246B Created OS            00 (0) 'MS-DOS'\n-51246C Extract Zip Spec      14 (20) '2.0'\n-51246D Extract OS            00 (0) 'MS-DOS'\n-51246E General Purpose Flag  0000 (0)\n-512470 Compression Method    0000 (0) 'Stored'\n-512472 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512476 CRC                   00000000 (0)\n-51247A Compressed Size       00000000 (0)\n-51247E Uncompressed Size     00000000 (0)\n-512482 Filename Length       0030 (48)\n-512484 Extra Length          0009 (9)\n-512486 Comment Length        0000 (0)\n-512488 Disk Start            0000 (0)\n-51248A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51248C Ext File Attributes   00000000 (0)\n-512490 Local Header Offset   0001812F (98607)\n-512494 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512494: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5124C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5124C6   Length              0005 (5)\n-5124C8   Flags               01 (1) 'Modification'\n-5124C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5124CD CENTRAL HEADER #16    02014B50 (33639248)\n-5124D1 Created Zip Spec      14 (20) '2.0'\n-5124D2 Created OS            00 (0) 'MS-DOS'\n-5124D3 Extract Zip Spec      14 (20) '2.0'\n-5124D4 Extract OS            00 (0) 'MS-DOS'\n-5124D5 General Purpose Flag  0000 (0)\n-5124D7 Compression Method    0000 (0) 'Stored'\n-5124D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5124DD CRC                   00000000 (0)\n-5124E1 Compressed Size       00000000 (0)\n-5124E5 Uncompressed Size     00000000 (0)\n-5124E9 Filename Length       0067 (103)\n-5124EB Extra Length          0009 (9)\n-5124ED Comment Length        0000 (0)\n-5124EF Disk Start            0000 (0)\n-5124F1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5124F3 Ext File Attributes   00000000 (0)\n-5124F7 Local Header Offset   00018186 (98694)\n-5124FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5124FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512562 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512564   Length              0005 (5)\n-512566   Flags               01 (1) 'Modification'\n-512567   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51256B CENTRAL HEADER #17    02014B50 (33639248)\n-51256F Created Zip Spec      14 (20) '2.0'\n-512570 Created OS            00 (0) 'MS-DOS'\n-512571 Extract Zip Spec      14 (20) '2.0'\n-512572 Extract OS            00 (0) 'MS-DOS'\n-512573 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512575 Compression Method    0000 (0) 'Stored'\n-512577 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51257B CRC                   9CB4EC6B (2629102699)\n-51257F Compressed Size       00000AA2 (2722)\n-512583 Uncompressed Size     00000AA2 (2722)\n-512587 Filename Length       007D (125)\n-512589 Extra Length          0009 (9)\n-51258B Comment Length        0000 (0)\n-51258D Disk Start            0000 (0)\n-51258F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512591 Ext File Attributes   00000000 (0)\n-512595 Local Header Offset   00018214 (98836)\n-512599 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512599: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512618   Length              0005 (5)\n-51261A   Flags               01 (1) 'Modification'\n-51261B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51261F CENTRAL HEADER #18    02014B50 (33639248)\n-512623 Created Zip Spec      14 (20) '2.0'\n-512624 Created OS            00 (0) 'MS-DOS'\n-512625 Extract Zip Spec      14 (20) '2.0'\n-512626 Extract OS            00 (0) 'MS-DOS'\n-512627 General Purpose Flag  0000 (0)\n-512629 Compression Method    0000 (0) 'Stored'\n-51262B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51262F CRC                   00000000 (0)\n-512633 Compressed Size       00000000 (0)\n-512637 Uncompressed Size     00000000 (0)\n-51263B Filename Length       0023 (35)\n-51263D Extra Length          0009 (9)\n-51263F Comment Length        0000 (0)\n-512641 Disk Start            0000 (0)\n-512643 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512645 Ext File Attributes   00000000 (0)\n-512649 Local Header Offset   00018D6A (101738)\n-51264D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51264D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512670 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512672   Length              0005 (5)\n-512674   Flags               01 (1) 'Modification'\n-512675   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512679 CENTRAL HEADER #19    02014B50 (33639248)\n-51267D Created Zip Spec      14 (20) '2.0'\n-51267E Created OS            00 (0) 'MS-DOS'\n-51267F Extract Zip Spec      14 (20) '2.0'\n-512680 Extract OS            00 (0) 'MS-DOS'\n-512681 General Purpose Flag  0000 (0)\n-512683 Compression Method    0000 (0) 'Stored'\n-512685 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512689 CRC                   00000000 (0)\n-51268D Compressed Size       00000000 (0)\n-512691 Uncompressed Size     00000000 (0)\n-512695 Filename Length       002C (44)\n-512697 Extra Length          0009 (9)\n-512699 Comment Length        0000 (0)\n-51269B Disk Start            0000 (0)\n-51269D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51269F Ext File Attributes   00000000 (0)\n-5126A3 Local Header Offset   00018DB4 (101812)\n-5126A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5126A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5126D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5126D5   Length              0005 (5)\n-5126D7   Flags               01 (1) 'Modification'\n-5126D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5126DC CENTRAL HEADER #20    02014B50 (33639248)\n-5126E0 Created Zip Spec      14 (20) '2.0'\n-5126E1 Created OS            00 (0) 'MS-DOS'\n-5126E2 Extract Zip Spec      14 (20) '2.0'\n-5126E3 Extract OS            00 (0) 'MS-DOS'\n-5126E4 General Purpose Flag  0000 (0)\n-5126E6 Compression Method    0000 (0) 'Stored'\n-5126E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5126EC CRC                   00000000 (0)\n-5126F0 Compressed Size       00000000 (0)\n-5126F4 Uncompressed Size     00000000 (0)\n-5126F8 Filename Length       0058 (88)\n-5126FA Extra Length          0009 (9)\n-5126FC Comment Length        0000 (0)\n-5126FE Disk Start            0000 (0)\n-512700 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512702 Ext File Attributes   00000000 (0)\n-512706 Local Header Offset   00018E07 (101895)\n-51270A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51270A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512762 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512764   Length              0005 (5)\n-512766   Flags               01 (1) 'Modification'\n-512767   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51276B CENTRAL HEADER #21    02014B50 (33639248)\n-51276F Created Zip Spec      14 (20) '2.0'\n-512770 Created OS            00 (0) 'MS-DOS'\n-512771 Extract Zip Spec      14 (20) '2.0'\n-512772 Extract OS            00 (0) 'MS-DOS'\n-512773 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512775 Compression Method    0000 (0) 'Stored'\n-512777 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51277B CRC                   445AD7B2 (1146804146)\n-51277F Compressed Size       00000FBF (4031)\n-512783 Uncompressed Size     00000FBF (4031)\n-512787 Filename Length       006E (110)\n-512789 Extra Length          0009 (9)\n-51278B Comment Length        0000 (0)\n-51278D Disk Start            0000 (0)\n-51278F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512791 Ext File Attributes   00000000 (0)\n-512795 Local Header Offset   00018E86 (102022)\n-512799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512807 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512809   Length              0005 (5)\n-51280B   Flags               01 (1) 'Modification'\n-51280C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512810 CENTRAL HEADER #22    02014B50 (33639248)\n-512814 Created Zip Spec      14 (20) '2.0'\n-512815 Created OS            00 (0) 'MS-DOS'\n-512816 Extract Zip Spec      14 (20) '2.0'\n-512817 Extract OS            00 (0) 'MS-DOS'\n-512818 General Purpose Flag  0000 (0)\n-51281A Compression Method    0000 (0) 'Stored'\n-51281C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512820 CRC                   00000000 (0)\n-512824 Compressed Size       00000000 (0)\n-512828 Uncompressed Size     00000000 (0)\n-51282C Filename Length       0058 (88)\n-51282E Extra Length          0009 (9)\n-512830 Comment Length        0000 (0)\n-512832 Disk Start            0000 (0)\n-512834 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512836 Ext File Attributes   00000000 (0)\n-51283A Local Header Offset   00019EEA (106218)\n-51283E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51283E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512896 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512898   Length              0005 (5)\n-51289A   Flags               01 (1) 'Modification'\n-51289B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51289F CENTRAL HEADER #23    02014B50 (33639248)\n-5128A3 Created Zip Spec      14 (20) '2.0'\n-5128A4 Created OS            00 (0) 'MS-DOS'\n-5128A5 Extract Zip Spec      14 (20) '2.0'\n-5128A6 Extract OS            00 (0) 'MS-DOS'\n-5128A7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5128A9 Compression Method    0000 (0) 'Stored'\n-5128AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5128AF CRC                   A2A96EA2 (2729012898)\n-5128B3 Compressed Size       000016DE (5854)\n-5128B7 Uncompressed Size     000016DE (5854)\n-5128BB Filename Length       006E (110)\n-5128BD Extra Length          0009 (9)\n-5128BF Comment Length        0000 (0)\n-5128C1 Disk Start            0000 (0)\n-5128C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5128C5 Ext File Attributes   00000000 (0)\n-5128C9 Local Header Offset   00019F69 (106345)\n-5128CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5128CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51293B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51293D   Length              0005 (5)\n-51293F   Flags               01 (1) 'Modification'\n-512940   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512944 CENTRAL HEADER #24    02014B50 (33639248)\n-512948 Created Zip Spec      14 (20) '2.0'\n-512949 Created OS            00 (0) 'MS-DOS'\n-51294A Extract Zip Spec      14 (20) '2.0'\n-51294B Extract OS            00 (0) 'MS-DOS'\n-51294C General Purpose Flag  0000 (0)\n-51294E Compression Method    0000 (0) 'Stored'\n-512950 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512954 CRC                   00000000 (0)\n-512958 Compressed Size       00000000 (0)\n-51295C Uncompressed Size     00000000 (0)\n-512960 Filename Length       002F (47)\n-512962 Extra Length          0009 (9)\n-512964 Comment Length        0000 (0)\n-512966 Disk Start            0000 (0)\n-512968 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51296A Ext File Attributes   00000000 (0)\n-51296E Local Header Offset   0001B6EC (112364)\n-512972 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512972: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5129A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5129A3   Length              0005 (5)\n-5129A5   Flags               01 (1) 'Modification'\n-5129A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5129AA CENTRAL HEADER #25    02014B50 (33639248)\n-5129AE Created Zip Spec      14 (20) '2.0'\n-5129AF Created OS            00 (0) 'MS-DOS'\n-5129B0 Extract Zip Spec      14 (20) '2.0'\n-5129B1 Extract OS            00 (0) 'MS-DOS'\n-5129B2 General Purpose Flag  0000 (0)\n-5129B4 Compression Method    0000 (0) 'Stored'\n-5129B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5129BA CRC                   00000000 (0)\n-5129BE Compressed Size       00000000 (0)\n-5129C2 Uncompressed Size     00000000 (0)\n-5129C6 Filename Length       0038 (56)\n-5129C8 Extra Length          0009 (9)\n-5129CA Comment Length        0000 (0)\n-5129CC Disk Start            0000 (0)\n-5129CE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5129D0 Ext File Attributes   00000000 (0)\n-5129D4 Local Header Offset   0001B742 (112450)\n-5129D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5129D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512A10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512A12   Length              0005 (5)\n-512A14   Flags               01 (1) 'Modification'\n-512A15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512A19 CENTRAL HEADER #26    02014B50 (33639248)\n-512A1D Created Zip Spec      14 (20) '2.0'\n-512A1E Created OS            00 (0) 'MS-DOS'\n-512A1F Extract Zip Spec      14 (20) '2.0'\n-512A20 Extract OS            00 (0) 'MS-DOS'\n-512A21 General Purpose Flag  0000 (0)\n-512A23 Compression Method    0000 (0) 'Stored'\n-512A25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512A29 CRC                   00000000 (0)\n-512A2D Compressed Size       00000000 (0)\n-512A31 Uncompressed Size     00000000 (0)\n-512A35 Filename Length       0068 (104)\n-512A37 Extra Length          0009 (9)\n-512A39 Comment Length        0000 (0)\n-512A3B Disk Start            0000 (0)\n-512A3D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512A3F Ext File Attributes   00000000 (0)\n-512A43 Local Header Offset   0001B7A1 (112545)\n-512A47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512A47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512AAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512AB1   Length              0005 (5)\n-512AB3   Flags               01 (1) 'Modification'\n-512AB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512AB8 CENTRAL HEADER #27    02014B50 (33639248)\n-512ABC Created Zip Spec      14 (20) '2.0'\n-512ABD Created OS            00 (0) 'MS-DOS'\n-512ABE Extract Zip Spec      14 (20) '2.0'\n-512ABF Extract OS            00 (0) 'MS-DOS'\n-512AC0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512AC2 Compression Method    0000 (0) 'Stored'\n-512AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512AC8 CRC                   7416DF2A (1947655978)\n-512ACC Compressed Size       00001512 (5394)\n-512AD0 Uncompressed Size     00001512 (5394)\n-512AD4 Filename Length       007E (126)\n-512AD6 Extra Length          0009 (9)\n-512AD8 Comment Length        0000 (0)\n-512ADA Disk Start            0000 (0)\n-512ADC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512ADE Ext File Attributes   00000000 (0)\n-512AE2 Local Header Offset   0001B830 (112688)\n-512AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512B64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512B66   Length              0005 (5)\n-512B68   Flags               01 (1) 'Modification'\n-512B69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512B6D CENTRAL HEADER #28    02014B50 (33639248)\n-512B71 Created Zip Spec      14 (20) '2.0'\n-512B72 Created OS            00 (0) 'MS-DOS'\n-512B73 Extract Zip Spec      14 (20) '2.0'\n-512B74 Extract OS            00 (0) 'MS-DOS'\n-512B75 General Purpose Flag  0000 (0)\n-512B77 Compression Method    0000 (0) 'Stored'\n-512B79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512B7D CRC                   00000000 (0)\n-512B81 Compressed Size       00000000 (0)\n-512B85 Uncompressed Size     00000000 (0)\n-512B89 Filename Length       0022 (34)\n-512B8B Extra Length          0009 (9)\n-512B8D Comment Length        0000 (0)\n-512B8F Disk Start            0000 (0)\n-512B91 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512B93 Ext File Attributes   00000000 (0)\n-512B97 Local Header Offset   0001CDF7 (118263)\n-512B9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512B9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512BBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512BBF   Length              0005 (5)\n-512BC1   Flags               01 (1) 'Modification'\n-512BC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512BC6 CENTRAL HEADER #29    02014B50 (33639248)\n-512BCA Created Zip Spec      14 (20) '2.0'\n-512BCB Created OS            00 (0) 'MS-DOS'\n-512BCC Extract Zip Spec      14 (20) '2.0'\n-512BCD Extract OS            00 (0) 'MS-DOS'\n-512BCE General Purpose Flag  0000 (0)\n-512BD0 Compression Method    0000 (0) 'Stored'\n-512BD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512BD6 CRC                   00000000 (0)\n-512BDA Compressed Size       00000000 (0)\n-512BDE Uncompressed Size     00000000 (0)\n-512BE2 Filename Length       002B (43)\n-512BE4 Extra Length          0009 (9)\n-512BE6 Comment Length        0000 (0)\n-512BE8 Disk Start            0000 (0)\n-512BEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512BEC Ext File Attributes   00000000 (0)\n-512BF0 Local Header Offset   0001CE40 (118336)\n-512BF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512BF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512C1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512C21   Length              0005 (5)\n-512C23   Flags               01 (1) 'Modification'\n-512C24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512C28 CENTRAL HEADER #30    02014B50 (33639248)\n-512C2C Created Zip Spec      14 (20) '2.0'\n-512C2D Created OS            00 (0) 'MS-DOS'\n-512C2E Extract Zip Spec      14 (20) '2.0'\n-512C2F Extract OS            00 (0) 'MS-DOS'\n-512C30 General Purpose Flag  0000 (0)\n-512C32 Compression Method    0000 (0) 'Stored'\n-512C34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512C38 CRC                   00000000 (0)\n-512C3C Compressed Size       00000000 (0)\n-512C40 Uncompressed Size     00000000 (0)\n-512C44 Filename Length       0065 (101)\n-512C46 Extra Length          0009 (9)\n-512C48 Comment Length        0000 (0)\n-512C4A Disk Start            0000 (0)\n-512C4C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512C4E Ext File Attributes   00000000 (0)\n-512C52 Local Header Offset   0001CE92 (118418)\n-512C56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512C56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512CBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512CBD   Length              0005 (5)\n-512CBF   Flags               01 (1) 'Modification'\n-512CC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512CC4 CENTRAL HEADER #31    02014B50 (33639248)\n-512CC8 Created Zip Spec      14 (20) '2.0'\n-512CC9 Created OS            00 (0) 'MS-DOS'\n-512CCA Extract Zip Spec      14 (20) '2.0'\n-512CCB Extract OS            00 (0) 'MS-DOS'\n-512CCC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512CCE Compression Method    0000 (0) 'Stored'\n-512CD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512CD4 CRC                   826E1CC4 (2188254404)\n-512CD8 Compressed Size       00002F90 (12176)\n-512CDC Uncompressed Size     00002F90 (12176)\n-512CE0 Filename Length       007B (123)\n-512CE2 Extra Length          0009 (9)\n-512CE4 Comment Length        0000 (0)\n-512CE6 Disk Start            0000 (0)\n-512CE8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512CEA Ext File Attributes   00000000 (0)\n-512CEE Local Header Offset   0001CF1E (118558)\n-512CF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512CF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512D6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512D6F   Length              0005 (5)\n-512D71   Flags               01 (1) 'Modification'\n-512D72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512D76 CENTRAL HEADER #32    02014B50 (33639248)\n-512D7A Created Zip Spec      14 (20) '2.0'\n-512D7B Created OS            00 (0) 'MS-DOS'\n-512D7C Extract Zip Spec      14 (20) '2.0'\n-512D7D Extract OS            00 (0) 'MS-DOS'\n-512D7E General Purpose Flag  0000 (0)\n-512D80 Compression Method    0000 (0) 'Stored'\n-512D82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512D86 CRC                   00000000 (0)\n-512D8A Compressed Size       00000000 (0)\n-512D8E Uncompressed Size     00000000 (0)\n-512D92 Filename Length       006E (110)\n-512D94 Extra Length          0009 (9)\n-512D96 Comment Length        0000 (0)\n-512D98 Disk Start            0000 (0)\n-512D9A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512D9C Ext File Attributes   00000000 (0)\n-512DA0 Local Header Offset   0001FF60 (130912)\n-512DA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512DA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512E12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512E14   Length              0005 (5)\n-512E16   Flags               01 (1) 'Modification'\n-512E17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512E1B CENTRAL HEADER #33    02014B50 (33639248)\n-512E1F Created Zip Spec      14 (20) '2.0'\n-512E20 Created OS            00 (0) 'MS-DOS'\n-512E21 Extract Zip Spec      14 (20) '2.0'\n-512E22 Extract OS            00 (0) 'MS-DOS'\n-512E23 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512E25 Compression Method    0000 (0) 'Stored'\n-512E27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512E2B CRC                   1BE163AC (467755948)\n-512E2F Compressed Size       00000967 (2407)\n-512E33 Uncompressed Size     00000967 (2407)\n-512E37 Filename Length       0084 (132)\n-512E39 Extra Length          0009 (9)\n-512E3B Comment Length        0000 (0)\n-512E3D Disk Start            0000 (0)\n-512E3F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512E41 Ext File Attributes   00000000 (0)\n-512E45 Local Header Offset   0001FFF5 (131061)\n-512E49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+108CC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+108CC5   Length              0005 (5)\n+108CC7   Flags               01 (1) 'Modification'\n+108CC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+108CCC PAYLOAD\n+\n+1097A0 DATA DESCRIPTOR       08074B50 (134695760)\n+1097A4 CRC                   3FC95820 (1070159904)\n+1097A8 Compressed Size       00000AD4 (2772)\n+1097AC Uncompressed Size     00000AD4 (2772)\n+\n+1097B0 LOCAL HEADER #394     04034B50 (67324752)\n+1097B4 Extract Zip Spec      14 (20) '2.0'\n+1097B5 Extract OS            00 (0) 'MS-DOS'\n+1097B6 General Purpose Flag  0000 (0)\n+1097B8 Compression Method    0000 (0) 'Stored'\n+1097BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1097BE CRC                   00000000 (0)\n+1097C2 Compressed Size       00000000 (0)\n+1097C6 Uncompressed Size     00000000 (0)\n+1097CA Filename Length       0026 (38)\n+1097CC Extra Length          0009 (9)\n+1097CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1097CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1097F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1097F6   Length              0005 (5)\n+1097F8   Flags               01 (1) 'Modification'\n+1097F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1097FD LOCAL HEADER #395     04034B50 (67324752)\n+109801 Extract Zip Spec      14 (20) '2.0'\n+109802 Extract OS            00 (0) 'MS-DOS'\n+109803 General Purpose Flag  0000 (0)\n+109805 Compression Method    0000 (0) 'Stored'\n+109807 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10980B CRC                   00000000 (0)\n+10980F Compressed Size       00000000 (0)\n+109813 Uncompressed Size     00000000 (0)\n+109817 Filename Length       002F (47)\n+109819 Extra Length          0009 (9)\n+10981B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10981B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10984A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10984C   Length              0005 (5)\n+10984E   Flags               01 (1) 'Modification'\n+10984F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+109853 LOCAL HEADER #396     04034B50 (67324752)\n+109857 Extract Zip Spec      14 (20) '2.0'\n+109858 Extract OS            00 (0) 'MS-DOS'\n+109859 General Purpose Flag  0000 (0)\n+10985B Compression Method    0000 (0) 'Stored'\n+10985D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+109861 CRC                   00000000 (0)\n+109865 Compressed Size       00000000 (0)\n+109869 Uncompressed Size     00000000 (0)\n+10986D Filename Length       005D (93)\n+10986F Extra Length          0009 (9)\n+109871 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x109871: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1098CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1098D0   Length              0005 (5)\n+1098D2   Flags               01 (1) 'Modification'\n+1098D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1098D7 LOCAL HEADER #397     04034B50 (67324752)\n+1098DB Extract Zip Spec      14 (20) '2.0'\n+1098DC Extract OS            00 (0) 'MS-DOS'\n+1098DD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+1098DF Compression Method    0000 (0) 'Stored'\n+1098E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1098E5 CRC                   00000000 (0)\n+1098E9 Compressed Size       00000000 (0)\n+1098ED Uncompressed Size     00000000 (0)\n+1098F1 Filename Length       0073 (115)\n+1098F3 Extra Length          0009 (9)\n+1098F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1098F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+109968 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10996A   Length              0005 (5)\n+10996C   Flags               01 (1) 'Modification'\n+10996D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+109971 PAYLOAD\n+\n+10A6A0 DATA DESCRIPTOR       08074B50 (134695760)\n+10A6A4 CRC                   41CBDE11 (1103879697)\n+10A6A8 Compressed Size       00000D2F (3375)\n+10A6AC Uncompressed Size     00000D2F (3375)\n+\n+10A6B0 LOCAL HEADER #398     04034B50 (67324752)\n+10A6B4 Extract Zip Spec      14 (20) '2.0'\n+10A6B5 Extract OS            00 (0) 'MS-DOS'\n+10A6B6 General Purpose Flag  0000 (0)\n+10A6B8 Compression Method    0000 (0) 'Stored'\n+10A6BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10A6BE CRC                   00000000 (0)\n+10A6C2 Compressed Size       00000000 (0)\n+10A6C6 Uncompressed Size     00000000 (0)\n+10A6CA Filename Length       0063 (99)\n+10A6CC Extra Length          0009 (9)\n+10A6CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10A6CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10A731 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10A733   Length              0005 (5)\n+10A735   Flags               01 (1) 'Modification'\n+10A736   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10A73A LOCAL HEADER #399     04034B50 (67324752)\n+10A73E Extract Zip Spec      14 (20) '2.0'\n+10A73F Extract OS            00 (0) 'MS-DOS'\n+10A740 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10A742 Compression Method    0000 (0) 'Stored'\n+10A744 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10A748 CRC                   00000000 (0)\n+10A74C Compressed Size       00000000 (0)\n+10A750 Uncompressed Size     00000000 (0)\n+10A754 Filename Length       0079 (121)\n+10A756 Extra Length          0009 (9)\n+10A758 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10A758: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10A7D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10A7D3   Length              0005 (5)\n+10A7D5   Flags               01 (1) 'Modification'\n+10A7D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10A7DA PAYLOAD\n+\n+10C453 DATA DESCRIPTOR       08074B50 (134695760)\n+10C457 CRC                   1D768ED5 (494309077)\n+10C45B Compressed Size       00001C79 (7289)\n+10C45F Uncompressed Size     00001C79 (7289)\n+\n+10C463 LOCAL HEADER #400     04034B50 (67324752)\n+10C467 Extract Zip Spec      14 (20) '2.0'\n+10C468 Extract OS            00 (0) 'MS-DOS'\n+10C469 General Purpose Flag  0000 (0)\n+10C46B Compression Method    0000 (0) 'Stored'\n+10C46D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10C471 CRC                   00000000 (0)\n+10C475 Compressed Size       00000000 (0)\n+10C479 Uncompressed Size     00000000 (0)\n+10C47D Filename Length       002F (47)\n+10C47F Extra Length          0009 (9)\n+10C481 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10C481: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10C4B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10C4B2   Length              0005 (5)\n+10C4B4   Flags               01 (1) 'Modification'\n+10C4B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10C4B9 LOCAL HEADER #401     04034B50 (67324752)\n+10C4BD Extract Zip Spec      14 (20) '2.0'\n+10C4BE Extract OS            00 (0) 'MS-DOS'\n+10C4BF General Purpose Flag  0000 (0)\n+10C4C1 Compression Method    0000 (0) 'Stored'\n+10C4C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10C4C7 CRC                   00000000 (0)\n+10C4CB Compressed Size       00000000 (0)\n+10C4CF Uncompressed Size     00000000 (0)\n+10C4D3 Filename Length       0038 (56)\n+10C4D5 Extra Length          0009 (9)\n+10C4D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10C4D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10C50F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10C511   Length              0005 (5)\n+10C513   Flags               01 (1) 'Modification'\n+10C514   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10C518 LOCAL HEADER #402     04034B50 (67324752)\n+10C51C Extract Zip Spec      14 (20) '2.0'\n+10C51D Extract OS            00 (0) 'MS-DOS'\n+10C51E General Purpose Flag  0000 (0)\n+10C520 Compression Method    0000 (0) 'Stored'\n+10C522 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10C526 CRC                   00000000 (0)\n+10C52A Compressed Size       00000000 (0)\n+10C52E Uncompressed Size     00000000 (0)\n+10C532 Filename Length       006B (107)\n+10C534 Extra Length          0009 (9)\n+10C536 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10C536: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10C5A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10C5A3   Length              0005 (5)\n+10C5A5   Flags               01 (1) 'Modification'\n+10C5A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10C5AA LOCAL HEADER #403     04034B50 (67324752)\n+10C5AE Extract Zip Spec      14 (20) '2.0'\n+10C5AF Extract OS            00 (0) 'MS-DOS'\n+10C5B0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10C5B2 Compression Method    0000 (0) 'Stored'\n+10C5B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10C5B8 CRC                   00000000 (0)\n+10C5BC Compressed Size       00000000 (0)\n+10C5C0 Uncompressed Size     00000000 (0)\n+10C5C4 Filename Length       0081 (129)\n+10C5C6 Extra Length          0009 (9)\n+10C5C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10C5C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10C649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10C64B   Length              0005 (5)\n+10C64D   Flags               01 (1) 'Modification'\n+10C64E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10C652 PAYLOAD\n+\n+10E36B DATA DESCRIPTOR       08074B50 (134695760)\n+10E36F CRC                   7A85C658 (2055587416)\n+10E373 Compressed Size       00001D19 (7449)\n+10E377 Uncompressed Size     00001D19 (7449)\n+\n+10E37B LOCAL HEADER #404     04034B50 (67324752)\n+10E37F Extract Zip Spec      14 (20) '2.0'\n+10E380 Extract OS            00 (0) 'MS-DOS'\n+10E381 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+10E383 Compression Method    0000 (0) 'Stored'\n+10E385 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10E389 CRC                   00000000 (0)\n+10E38D Compressed Size       00000000 (0)\n+10E391 Uncompressed Size     00000000 (0)\n+10E395 Filename Length       001A (26)\n+10E397 Extra Length          0009 (9)\n+10E399 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10E399: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10E3B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10E3B5   Length              0005 (5)\n+10E3B7   Flags               01 (1) 'Modification'\n+10E3B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10E3BC PAYLOAD\n+\n+511F4F DATA DESCRIPTOR       08074B50 (134695760)\n+511F53 CRC                   3FE1AA84 (1071753860)\n+511F57 Compressed Size       00403B93 (4209555)\n+511F5B Uncompressed Size     00403B93 (4209555)\n+\n+511F5F CENTRAL HEADER #1     02014B50 (33639248)\n+511F63 Created Zip Spec      14 (20) '2.0'\n+511F64 Created OS            00 (0) 'MS-DOS'\n+511F65 Extract Zip Spec      14 (20) '2.0'\n+511F66 Extract OS            00 (0) 'MS-DOS'\n+511F67 General Purpose Flag  0000 (0)\n+511F69 Compression Method    0000 (0) 'Stored'\n+511F6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+511F6F CRC                   00000000 (0)\n+511F73 Compressed Size       00000000 (0)\n+511F77 Uncompressed Size     00000000 (0)\n+511F7B Filename Length       0009 (9)\n+511F7D Extra Length          0009 (9)\n+511F7F Comment Length        0000 (0)\n+511F81 Disk Start            0000 (0)\n+511F83 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+511F85 Ext File Attributes   00000000 (0)\n+511F89 Local Header Offset   00000000 (0)\n+511F8D Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x511F8D: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+511F96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+511F98   Length              0005 (5)\n+511F9A   Flags               01 (1) 'Modification'\n+511F9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+511F9F CENTRAL HEADER #2     02014B50 (33639248)\n+511FA3 Created Zip Spec      14 (20) '2.0'\n+511FA4 Created OS            00 (0) 'MS-DOS'\n+511FA5 Extract Zip Spec      14 (20) '2.0'\n+511FA6 Extract OS            00 (0) 'MS-DOS'\n+511FA7 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+511FA9 Compression Method    0000 (0) 'Stored'\n+511FAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+511FAF CRC                   49E1B674 (1239529076)\n+511FB3 Compressed Size       00012B5D (76637)\n+511FB7 Uncompressed Size     00012B5D (76637)\n+511FBB Filename Length       0015 (21)\n+511FBD Extra Length          0009 (9)\n+511FBF Comment Length        0000 (0)\n+511FC1 Disk Start            0000 (0)\n+511FC3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+511FC5 Ext File Attributes   00000000 (0)\n+511FC9 Local Header Offset   00000030 (48)\n+511FCD Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x511FCD: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+511FE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+511FE4   Length              0005 (5)\n+511FE6   Flags               01 (1) 'Modification'\n+511FE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+511FEB CENTRAL HEADER #3     02014B50 (33639248)\n+511FEF Created Zip Spec      14 (20) '2.0'\n+511FF0 Created OS            00 (0) 'MS-DOS'\n+511FF1 Extract Zip Spec      14 (20) '2.0'\n+511FF2 Extract OS            00 (0) 'MS-DOS'\n+511FF3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+511FF5 Compression Method    0000 (0) 'Stored'\n+511FF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+511FFB CRC                   86E2B4B4 (2263004340)\n+511FFF Compressed Size       00002C5E (11358)\n+512003 Uncompressed Size     00002C5E (11358)\n+512007 Filename Length       0010 (16)\n+512009 Extra Length          0009 (9)\n+51200B Comment Length        0000 (0)\n+51200D Disk Start            0000 (0)\n+51200F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512011 Ext File Attributes   00000000 (0)\n+512015 Local Header Offset   00012BD9 (76761)\n+512019 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512019: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512029 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51202B   Length              0005 (5)\n+51202D   Flags               01 (1) 'Modification'\n+51202E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512032 CENTRAL HEADER #4     02014B50 (33639248)\n+512036 Created Zip Spec      14 (20) '2.0'\n+512037 Created OS            00 (0) 'MS-DOS'\n+512038 Extract Zip Spec      14 (20) '2.0'\n+512039 Extract OS            00 (0) 'MS-DOS'\n+51203A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51203C Compression Method    0000 (0) 'Stored'\n+51203E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512042 CRC                   D55ACFD6 (3579498454)\n+512046 Compressed Size       00000107 (263)\n+51204A Uncompressed Size     00000107 (263)\n+51204E Filename Length       0014 (20)\n+512050 Extra Length          0009 (9)\n+512052 Comment Length        0000 (0)\n+512054 Disk Start            0000 (0)\n+512056 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512058 Ext File Attributes   00000000 (0)\n+51205C Local Header Offset   0001587E (88190)\n+512060 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512060: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512076   Length              0005 (5)\n+512078   Flags               01 (1) 'Modification'\n+512079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51207D CENTRAL HEADER #5     02014B50 (33639248)\n+512081 Created Zip Spec      14 (20) '2.0'\n+512082 Created OS            00 (0) 'MS-DOS'\n+512083 Extract Zip Spec      14 (20) '2.0'\n+512084 Extract OS            00 (0) 'MS-DOS'\n+512085 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512087 Compression Method    0000 (0) 'Stored'\n+512089 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51208D CRC                   91A82808 (2443716616)\n+512091 Compressed Size       000000A0 (160)\n+512095 Uncompressed Size     000000A0 (160)\n+512099 Filename Length       000F (15)\n+51209B Extra Length          0009 (9)\n+51209D Comment Length        0000 (0)\n+51209F Disk Start            0000 (0)\n+5120A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5120A3 Ext File Attributes   00000000 (0)\n+5120A7 Local Header Offset   000159D0 (88528)\n+5120AB Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5120AB: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5120BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5120BC   Length              0005 (5)\n+5120BE   Flags               01 (1) 'Modification'\n+5120BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5120C3 CENTRAL HEADER #6     02014B50 (33639248)\n+5120C7 Created Zip Spec      14 (20) '2.0'\n+5120C8 Created OS            00 (0) 'MS-DOS'\n+5120C9 Extract Zip Spec      14 (20) '2.0'\n+5120CA Extract OS            00 (0) 'MS-DOS'\n+5120CB General Purpose Flag  0000 (0)\n+5120CD Compression Method    0000 (0) 'Stored'\n+5120CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5120D3 CRC                   00000000 (0)\n+5120D7 Compressed Size       00000000 (0)\n+5120DB Uncompressed Size     00000000 (0)\n+5120DF Filename Length       000F (15)\n+5120E1 Extra Length          0009 (9)\n+5120E3 Comment Length        0000 (0)\n+5120E5 Disk Start            0000 (0)\n+5120E7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5120E9 Ext File Attributes   00000000 (0)\n+5120ED Local Header Offset   00015AB6 (88758)\n+5120F1 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5120F1: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512100 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512102   Length              0005 (5)\n+512104   Flags               01 (1) 'Modification'\n+512105   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512109 CENTRAL HEADER #7     02014B50 (33639248)\n+51210D Created Zip Spec      14 (20) '2.0'\n+51210E Created OS            00 (0) 'MS-DOS'\n+51210F Extract Zip Spec      14 (20) '2.0'\n+512110 Extract OS            00 (0) 'MS-DOS'\n+512111 General Purpose Flag  0000 (0)\n+512113 Compression Method    0000 (0) 'Stored'\n+512115 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512119 CRC                   00000000 (0)\n+51211D Compressed Size       00000000 (0)\n+512121 Uncompressed Size     00000000 (0)\n+512125 Filename Length       001F (31)\n+512127 Extra Length          0009 (9)\n+512129 Comment Length        0000 (0)\n+51212B Disk Start            0000 (0)\n+51212D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51212F Ext File Attributes   00000000 (0)\n+512133 Local Header Offset   00015AEC (88812)\n+512137 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512137: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512156 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512158   Length              0005 (5)\n+51215A   Flags               01 (1) 'Modification'\n+51215B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51215F CENTRAL HEADER #8     02014B50 (33639248)\n+512163 Created Zip Spec      14 (20) '2.0'\n+512164 Created OS            00 (0) 'MS-DOS'\n+512165 Extract Zip Spec      14 (20) '2.0'\n+512166 Extract OS            00 (0) 'MS-DOS'\n+512167 General Purpose Flag  0000 (0)\n+512169 Compression Method    0000 (0) 'Stored'\n+51216B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51216F CRC                   00000000 (0)\n+512173 Compressed Size       00000000 (0)\n+512177 Uncompressed Size     00000000 (0)\n+51217B Filename Length       0035 (53)\n+51217D Extra Length          0009 (9)\n+51217F Comment Length        0000 (0)\n+512181 Disk Start            0000 (0)\n+512183 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512185 Ext File Attributes   00000000 (0)\n+512189 Local Header Offset   00015B32 (88882)\n+51218D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51218D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5121C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5121C4   Length              0005 (5)\n+5121C6   Flags               01 (1) 'Modification'\n+5121C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5121CB CENTRAL HEADER #9     02014B50 (33639248)\n+5121CF Created Zip Spec      14 (20) '2.0'\n+5121D0 Created OS            00 (0) 'MS-DOS'\n+5121D1 Extract Zip Spec      14 (20) '2.0'\n+5121D2 Extract OS            00 (0) 'MS-DOS'\n+5121D3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5121D5 Compression Method    0000 (0) 'Stored'\n+5121D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5121DB CRC                   00000000 (0)\n+5121DF Compressed Size       00000000 (0)\n+5121E3 Uncompressed Size     00000000 (0)\n+5121E7 Filename Length       0043 (67)\n+5121E9 Extra Length          0009 (9)\n+5121EB Comment Length        0000 (0)\n+5121ED Disk Start            0000 (0)\n+5121EF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5121F1 Ext File Attributes   00000000 (0)\n+5121F5 Local Header Offset   00015B8E (88974)\n+5121F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5121F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51223C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51223E   Length              0005 (5)\n+512240   Flags               01 (1) 'Modification'\n+512241   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512245 CENTRAL HEADER #10    02014B50 (33639248)\n+512249 Created Zip Spec      14 (20) '2.0'\n+51224A Created OS            00 (0) 'MS-DOS'\n+51224B Extract Zip Spec      14 (20) '2.0'\n+51224C Extract OS            00 (0) 'MS-DOS'\n+51224D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51224F Compression Method    0000 (0) 'Stored'\n+512251 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512255 CRC                   1814D611 (404018705)\n+512259 Compressed Size       00001EAA (7850)\n+51225D Uncompressed Size     00001EAA (7850)\n+512261 Filename Length       003C (60)\n+512263 Extra Length          0009 (9)\n+512265 Comment Length        0000 (0)\n+512267 Disk Start            0000 (0)\n+512269 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51226B Ext File Attributes   00000000 (0)\n+51226F Local Header Offset   00015C08 (89096)\n+512273 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512273: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5122AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5122B1   Length              0005 (5)\n+5122B3   Flags               01 (1) 'Modification'\n+5122B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5122B8 CENTRAL HEADER #11    02014B50 (33639248)\n+5122BC Created Zip Spec      14 (20) '2.0'\n+5122BD Created OS            00 (0) 'MS-DOS'\n+5122BE Extract Zip Spec      14 (20) '2.0'\n+5122BF Extract OS            00 (0) 'MS-DOS'\n+5122C0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5122C2 Compression Method    0000 (0) 'Stored'\n+5122C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5122C8 CRC                   13966CB5 (328625333)\n+5122CC Compressed Size       000004A4 (1188)\n+5122D0 Uncompressed Size     000004A4 (1188)\n+5122D4 Filename Length       0010 (16)\n+5122D6 Extra Length          0009 (9)\n+5122D8 Comment Length        0000 (0)\n+5122DA Disk Start            0000 (0)\n+5122DC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5122DE Ext File Attributes   00000000 (0)\n+5122E2 Local Header Offset   00017B25 (97061)\n+5122E6 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5122E6: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5122F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5122F8   Length              0005 (5)\n+5122FA   Flags               01 (1) 'Modification'\n+5122FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5122FF CENTRAL HEADER #12    02014B50 (33639248)\n+512303 Created Zip Spec      14 (20) '2.0'\n+512304 Created OS            00 (0) 'MS-DOS'\n+512305 Extract Zip Spec      14 (20) '2.0'\n+512306 Extract OS            00 (0) 'MS-DOS'\n+512307 General Purpose Flag  0000 (0)\n+512309 Compression Method    0000 (0) 'Stored'\n+51230B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51230F CRC                   00000000 (0)\n+512313 Compressed Size       00000000 (0)\n+512317 Uncompressed Size     00000000 (0)\n+51231B Filename Length       0005 (5)\n+51231D Extra Length          0009 (9)\n+51231F Comment Length        0000 (0)\n+512321 Disk Start            0000 (0)\n+512323 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512325 Ext File Attributes   00000000 (0)\n+512329 Local Header Offset   00018010 (98320)\n+51232D Filename              'XXXXX'\n+#\n+# WARNING: Offset 0x51232D: Filename 'XXXXX'\n+#          Zero length filename\n+#\n+512332 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512334   Length              0005 (5)\n+512336   Flags               01 (1) 'Modification'\n+512337   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51233B CENTRAL HEADER #13    02014B50 (33639248)\n+51233F Created Zip Spec      14 (20) '2.0'\n+512340 Created OS            00 (0) 'MS-DOS'\n+512341 Extract Zip Spec      14 (20) '2.0'\n+512342 Extract OS            00 (0) 'MS-DOS'\n+512343 General Purpose Flag  0000 (0)\n+512345 Compression Method    0000 (0) 'Stored'\n+512347 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51234B CRC                   00000000 (0)\n+51234F Compressed Size       00000000 (0)\n+512353 Uncompressed Size     00000000 (0)\n+512357 Filename Length       0015 (21)\n+512359 Extra Length          0009 (9)\n+51235B Comment Length        0000 (0)\n+51235D Disk Start            0000 (0)\n+51235F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512361 Ext File Attributes   00000000 (0)\n+512365 Local Header Offset   0001803C (98364)\n+512369 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512369: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51237E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512380   Length              0005 (5)\n+512382   Flags               01 (1) 'Modification'\n+512383   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512387 CENTRAL HEADER #14    02014B50 (33639248)\n+51238B Created Zip Spec      14 (20) '2.0'\n+51238C Created OS            00 (0) 'MS-DOS'\n+51238D Extract Zip Spec      14 (20) '2.0'\n+51238E Extract OS            00 (0) 'MS-DOS'\n+51238F General Purpose Flag  0000 (0)\n+512391 Compression Method    0000 (0) 'Stored'\n+512393 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512397 CRC                   00000000 (0)\n+51239B Compressed Size       00000000 (0)\n+51239F Uncompressed Size     00000000 (0)\n+5123A3 Filename Length       0027 (39)\n+5123A5 Extra Length          0009 (9)\n+5123A7 Comment Length        0000 (0)\n+5123A9 Disk Start            0000 (0)\n+5123AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5123AD Ext File Attributes   00000000 (0)\n+5123B1 Local Header Offset   00018078 (98424)\n+5123B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5123B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5123DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5123DE   Length              0005 (5)\n+5123E0   Flags               01 (1) 'Modification'\n+5123E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5123E5 CENTRAL HEADER #15    02014B50 (33639248)\n+5123E9 Created Zip Spec      14 (20) '2.0'\n+5123EA Created OS            00 (0) 'MS-DOS'\n+5123EB Extract Zip Spec      14 (20) '2.0'\n+5123EC Extract OS            00 (0) 'MS-DOS'\n+5123ED General Purpose Flag  0000 (0)\n+5123EF Compression Method    0000 (0) 'Stored'\n+5123F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5123F5 CRC                   00000000 (0)\n+5123F9 Compressed Size       00000000 (0)\n+5123FD Uncompressed Size     00000000 (0)\n+512401 Filename Length       0030 (48)\n+512403 Extra Length          0009 (9)\n+512405 Comment Length        0000 (0)\n+512407 Disk Start            0000 (0)\n+512409 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51240B Ext File Attributes   00000000 (0)\n+51240F Local Header Offset   000180C6 (98502)\n+512413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512443 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512445   Length              0005 (5)\n+512447   Flags               01 (1) 'Modification'\n+512448   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51244C CENTRAL HEADER #16    02014B50 (33639248)\n+512450 Created Zip Spec      14 (20) '2.0'\n+512451 Created OS            00 (0) 'MS-DOS'\n+512452 Extract Zip Spec      14 (20) '2.0'\n+512453 Extract OS            00 (0) 'MS-DOS'\n+512454 General Purpose Flag  0000 (0)\n+512456 Compression Method    0000 (0) 'Stored'\n+512458 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51245C CRC                   00000000 (0)\n+512460 Compressed Size       00000000 (0)\n+512464 Uncompressed Size     00000000 (0)\n+512468 Filename Length       0067 (103)\n+51246A Extra Length          0009 (9)\n+51246C Comment Length        0000 (0)\n+51246E Disk Start            0000 (0)\n+512470 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512472 Ext File Attributes   00000000 (0)\n+512476 Local Header Offset   0001811D (98589)\n+51247A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51247A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5124E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5124E3   Length              0005 (5)\n+5124E5   Flags               01 (1) 'Modification'\n+5124E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5124EA CENTRAL HEADER #17    02014B50 (33639248)\n+5124EE Created Zip Spec      14 (20) '2.0'\n+5124EF Created OS            00 (0) 'MS-DOS'\n+5124F0 Extract Zip Spec      14 (20) '2.0'\n+5124F1 Extract OS            00 (0) 'MS-DOS'\n+5124F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5124F4 Compression Method    0000 (0) 'Stored'\n+5124F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5124FA CRC                   9CB4EC6B (2629102699)\n+5124FE Compressed Size       00000AA2 (2722)\n+512502 Uncompressed Size     00000AA2 (2722)\n+512506 Filename Length       007D (125)\n+512508 Extra Length          0009 (9)\n+51250A Comment Length        0000 (0)\n+51250C Disk Start            0000 (0)\n+51250E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512510 Ext File Attributes   00000000 (0)\n+512514 Local Header Offset   000181AB (98731)\n+512518 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512518: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512595 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512597   Length              0005 (5)\n+512599   Flags               01 (1) 'Modification'\n+51259A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51259E CENTRAL HEADER #18    02014B50 (33639248)\n+5125A2 Created Zip Spec      14 (20) '2.0'\n+5125A3 Created OS            00 (0) 'MS-DOS'\n+5125A4 Extract Zip Spec      14 (20) '2.0'\n+5125A5 Extract OS            00 (0) 'MS-DOS'\n+5125A6 General Purpose Flag  0000 (0)\n+5125A8 Compression Method    0000 (0) 'Stored'\n+5125AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5125AE CRC                   00000000 (0)\n+5125B2 Compressed Size       00000000 (0)\n+5125B6 Uncompressed Size     00000000 (0)\n+5125BA Filename Length       0023 (35)\n+5125BC Extra Length          0009 (9)\n+5125BE Comment Length        0000 (0)\n+5125C0 Disk Start            0000 (0)\n+5125C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5125C4 Ext File Attributes   00000000 (0)\n+5125C8 Local Header Offset   00018D01 (101633)\n+5125CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5125CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5125EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5125F1   Length              0005 (5)\n+5125F3   Flags               01 (1) 'Modification'\n+5125F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5125F8 CENTRAL HEADER #19    02014B50 (33639248)\n+5125FC Created Zip Spec      14 (20) '2.0'\n+5125FD Created OS            00 (0) 'MS-DOS'\n+5125FE Extract Zip Spec      14 (20) '2.0'\n+5125FF Extract OS            00 (0) 'MS-DOS'\n+512600 General Purpose Flag  0000 (0)\n+512602 Compression Method    0000 (0) 'Stored'\n+512604 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512608 CRC                   00000000 (0)\n+51260C Compressed Size       00000000 (0)\n+512610 Uncompressed Size     00000000 (0)\n+512614 Filename Length       002C (44)\n+512616 Extra Length          0009 (9)\n+512618 Comment Length        0000 (0)\n+51261A Disk Start            0000 (0)\n+51261C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51261E Ext File Attributes   00000000 (0)\n+512622 Local Header Offset   00018D4B (101707)\n+512626 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512626: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512652 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512654   Length              0005 (5)\n+512656   Flags               01 (1) 'Modification'\n+512657   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51265B CENTRAL HEADER #20    02014B50 (33639248)\n+51265F Created Zip Spec      14 (20) '2.0'\n+512660 Created OS            00 (0) 'MS-DOS'\n+512661 Extract Zip Spec      14 (20) '2.0'\n+512662 Extract OS            00 (0) 'MS-DOS'\n+512663 General Purpose Flag  0000 (0)\n+512665 Compression Method    0000 (0) 'Stored'\n+512667 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51266B CRC                   00000000 (0)\n+51266F Compressed Size       00000000 (0)\n+512673 Uncompressed Size     00000000 (0)\n+512677 Filename Length       0058 (88)\n+512679 Extra Length          0009 (9)\n+51267B Comment Length        0000 (0)\n+51267D Disk Start            0000 (0)\n+51267F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512681 Ext File Attributes   00000000 (0)\n+512685 Local Header Offset   00018D9E (101790)\n+512689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5126E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5126E3   Length              0005 (5)\n+5126E5   Flags               01 (1) 'Modification'\n+5126E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5126EA CENTRAL HEADER #21    02014B50 (33639248)\n+5126EE Created Zip Spec      14 (20) '2.0'\n+5126EF Created OS            00 (0) 'MS-DOS'\n+5126F0 Extract Zip Spec      14 (20) '2.0'\n+5126F1 Extract OS            00 (0) 'MS-DOS'\n+5126F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5126F4 Compression Method    0000 (0) 'Stored'\n+5126F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5126FA CRC                   445AD7B2 (1146804146)\n+5126FE Compressed Size       00000FBF (4031)\n+512702 Uncompressed Size     00000FBF (4031)\n+512706 Filename Length       006E (110)\n+512708 Extra Length          0009 (9)\n+51270A Comment Length        0000 (0)\n+51270C Disk Start            0000 (0)\n+51270E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512710 Ext File Attributes   00000000 (0)\n+512714 Local Header Offset   00018E1D (101917)\n+512718 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512718: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512786 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512788   Length              0005 (5)\n+51278A   Flags               01 (1) 'Modification'\n+51278B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51278F CENTRAL HEADER #22    02014B50 (33639248)\n+512793 Created Zip Spec      14 (20) '2.0'\n+512794 Created OS            00 (0) 'MS-DOS'\n+512795 Extract Zip Spec      14 (20) '2.0'\n+512796 Extract OS            00 (0) 'MS-DOS'\n+512797 General Purpose Flag  0000 (0)\n+512799 Compression Method    0000 (0) 'Stored'\n+51279B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51279F CRC                   00000000 (0)\n+5127A3 Compressed Size       00000000 (0)\n+5127A7 Uncompressed Size     00000000 (0)\n+5127AB Filename Length       0058 (88)\n+5127AD Extra Length          0009 (9)\n+5127AF Comment Length        0000 (0)\n+5127B1 Disk Start            0000 (0)\n+5127B3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5127B5 Ext File Attributes   00000000 (0)\n+5127B9 Local Header Offset   00019E81 (106113)\n+5127BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5127BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512815 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512817   Length              0005 (5)\n+512819   Flags               01 (1) 'Modification'\n+51281A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51281E CENTRAL HEADER #23    02014B50 (33639248)\n+512822 Created Zip Spec      14 (20) '2.0'\n+512823 Created OS            00 (0) 'MS-DOS'\n+512824 Extract Zip Spec      14 (20) '2.0'\n+512825 Extract OS            00 (0) 'MS-DOS'\n+512826 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512828 Compression Method    0000 (0) 'Stored'\n+51282A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51282E CRC                   A2A96EA2 (2729012898)\n+512832 Compressed Size       000016DE (5854)\n+512836 Uncompressed Size     000016DE (5854)\n+51283A Filename Length       006E (110)\n+51283C Extra Length          0009 (9)\n+51283E Comment Length        0000 (0)\n+512840 Disk Start            0000 (0)\n+512842 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512844 Ext File Attributes   00000000 (0)\n+512848 Local Header Offset   00019F00 (106240)\n+51284C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51284C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5128BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5128BC   Length              0005 (5)\n+5128BE   Flags               01 (1) 'Modification'\n+5128BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5128C3 CENTRAL HEADER #24    02014B50 (33639248)\n+5128C7 Created Zip Spec      14 (20) '2.0'\n+5128C8 Created OS            00 (0) 'MS-DOS'\n+5128C9 Extract Zip Spec      14 (20) '2.0'\n+5128CA Extract OS            00 (0) 'MS-DOS'\n+5128CB General Purpose Flag  0000 (0)\n+5128CD Compression Method    0000 (0) 'Stored'\n+5128CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5128D3 CRC                   00000000 (0)\n+5128D7 Compressed Size       00000000 (0)\n+5128DB Uncompressed Size     00000000 (0)\n+5128DF Filename Length       002F (47)\n+5128E1 Extra Length          0009 (9)\n+5128E3 Comment Length        0000 (0)\n+5128E5 Disk Start            0000 (0)\n+5128E7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5128E9 Ext File Attributes   00000000 (0)\n+5128ED Local Header Offset   0001B683 (112259)\n+5128F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5128F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512920 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512922   Length              0005 (5)\n+512924   Flags               01 (1) 'Modification'\n+512925   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512929 CENTRAL HEADER #25    02014B50 (33639248)\n+51292D Created Zip Spec      14 (20) '2.0'\n+51292E Created OS            00 (0) 'MS-DOS'\n+51292F Extract Zip Spec      14 (20) '2.0'\n+512930 Extract OS            00 (0) 'MS-DOS'\n+512931 General Purpose Flag  0000 (0)\n+512933 Compression Method    0000 (0) 'Stored'\n+512935 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512939 CRC                   00000000 (0)\n+51293D Compressed Size       00000000 (0)\n+512941 Uncompressed Size     00000000 (0)\n+512945 Filename Length       0038 (56)\n+512947 Extra Length          0009 (9)\n+512949 Comment Length        0000 (0)\n+51294B Disk Start            0000 (0)\n+51294D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51294F Ext File Attributes   00000000 (0)\n+512953 Local Header Offset   0001B6D9 (112345)\n+512957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51298F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512991   Length              0005 (5)\n+512993   Flags               01 (1) 'Modification'\n+512994   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512998 CENTRAL HEADER #26    02014B50 (33639248)\n+51299C Created Zip Spec      14 (20) '2.0'\n+51299D Created OS            00 (0) 'MS-DOS'\n+51299E Extract Zip Spec      14 (20) '2.0'\n+51299F Extract OS            00 (0) 'MS-DOS'\n+5129A0 General Purpose Flag  0000 (0)\n+5129A2 Compression Method    0000 (0) 'Stored'\n+5129A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5129A8 CRC                   00000000 (0)\n+5129AC Compressed Size       00000000 (0)\n+5129B0 Uncompressed Size     00000000 (0)\n+5129B4 Filename Length       0068 (104)\n+5129B6 Extra Length          0009 (9)\n+5129B8 Comment Length        0000 (0)\n+5129BA Disk Start            0000 (0)\n+5129BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5129BE Ext File Attributes   00000000 (0)\n+5129C2 Local Header Offset   0001B738 (112440)\n+5129C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5129C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512A2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512A30   Length              0005 (5)\n+512A32   Flags               01 (1) 'Modification'\n+512A33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512A37 CENTRAL HEADER #27    02014B50 (33639248)\n+512A3B Created Zip Spec      14 (20) '2.0'\n+512A3C Created OS            00 (0) 'MS-DOS'\n+512A3D Extract Zip Spec      14 (20) '2.0'\n+512A3E Extract OS            00 (0) 'MS-DOS'\n+512A3F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512A41 Compression Method    0000 (0) 'Stored'\n+512A43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512A47 CRC                   7416DF2A (1947655978)\n+512A4B Compressed Size       00001512 (5394)\n+512A4F Uncompressed Size     00001512 (5394)\n+512A53 Filename Length       007E (126)\n+512A55 Extra Length          0009 (9)\n+512A57 Comment Length        0000 (0)\n+512A59 Disk Start            0000 (0)\n+512A5B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512A5D Ext File Attributes   00000000 (0)\n+512A61 Local Header Offset   0001B7C7 (112583)\n+512A65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512A65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512AE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512AE5   Length              0005 (5)\n+512AE7   Flags               01 (1) 'Modification'\n+512AE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512AEC CENTRAL HEADER #28    02014B50 (33639248)\n+512AF0 Created Zip Spec      14 (20) '2.0'\n+512AF1 Created OS            00 (0) 'MS-DOS'\n+512AF2 Extract Zip Spec      14 (20) '2.0'\n+512AF3 Extract OS            00 (0) 'MS-DOS'\n+512AF4 General Purpose Flag  0000 (0)\n+512AF6 Compression Method    0000 (0) 'Stored'\n+512AF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512AFC CRC                   00000000 (0)\n+512B00 Compressed Size       00000000 (0)\n+512B04 Uncompressed Size     00000000 (0)\n+512B08 Filename Length       0022 (34)\n+512B0A Extra Length          0009 (9)\n+512B0C Comment Length        0000 (0)\n+512B0E Disk Start            0000 (0)\n+512B10 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512B12 Ext File Attributes   00000000 (0)\n+512B16 Local Header Offset   0001CD8E (118158)\n+512B1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512B1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512B3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512B3E   Length              0005 (5)\n+512B40   Flags               01 (1) 'Modification'\n+512B41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512B45 CENTRAL HEADER #29    02014B50 (33639248)\n+512B49 Created Zip Spec      14 (20) '2.0'\n+512B4A Created OS            00 (0) 'MS-DOS'\n+512B4B Extract Zip Spec      14 (20) '2.0'\n+512B4C Extract OS            00 (0) 'MS-DOS'\n+512B4D General Purpose Flag  0000 (0)\n+512B4F Compression Method    0000 (0) 'Stored'\n+512B51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512B55 CRC                   00000000 (0)\n+512B59 Compressed Size       00000000 (0)\n+512B5D Uncompressed Size     00000000 (0)\n+512B61 Filename Length       002B (43)\n+512B63 Extra Length          0009 (9)\n+512B65 Comment Length        0000 (0)\n+512B67 Disk Start            0000 (0)\n+512B69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512B6B Ext File Attributes   00000000 (0)\n+512B6F Local Header Offset   0001CDD7 (118231)\n+512B73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512B73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512B9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512BA0   Length              0005 (5)\n+512BA2   Flags               01 (1) 'Modification'\n+512BA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512BA7 CENTRAL HEADER #30    02014B50 (33639248)\n+512BAB Created Zip Spec      14 (20) '2.0'\n+512BAC Created OS            00 (0) 'MS-DOS'\n+512BAD Extract Zip Spec      14 (20) '2.0'\n+512BAE Extract OS            00 (0) 'MS-DOS'\n+512BAF General Purpose Flag  0000 (0)\n+512BB1 Compression Method    0000 (0) 'Stored'\n+512BB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512BB7 CRC                   00000000 (0)\n+512BBB Compressed Size       00000000 (0)\n+512BBF Uncompressed Size     00000000 (0)\n+512BC3 Filename Length       0065 (101)\n+512BC5 Extra Length          0009 (9)\n+512BC7 Comment Length        0000 (0)\n+512BC9 Disk Start            0000 (0)\n+512BCB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512BCD Ext File Attributes   00000000 (0)\n+512BD1 Local Header Offset   0001CE29 (118313)\n+512BD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512BD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512C3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512C3C   Length              0005 (5)\n+512C3E   Flags               01 (1) 'Modification'\n+512C3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512C43 CENTRAL HEADER #31    02014B50 (33639248)\n+512C47 Created Zip Spec      14 (20) '2.0'\n+512C48 Created OS            00 (0) 'MS-DOS'\n+512C49 Extract Zip Spec      14 (20) '2.0'\n+512C4A Extract OS            00 (0) 'MS-DOS'\n+512C4B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512C4D Compression Method    0000 (0) 'Stored'\n+512C4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512C53 CRC                   826E1CC4 (2188254404)\n+512C57 Compressed Size       00002F90 (12176)\n+512C5B Uncompressed Size     00002F90 (12176)\n+512C5F Filename Length       007B (123)\n+512C61 Extra Length          0009 (9)\n+512C63 Comment Length        0000 (0)\n+512C65 Disk Start            0000 (0)\n+512C67 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512C69 Ext File Attributes   00000000 (0)\n+512C6D Local Header Offset   0001CEB5 (118453)\n+512C71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512C71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512CEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512CEE   Length              0005 (5)\n+512CF0   Flags               01 (1) 'Modification'\n+512CF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512CF5 CENTRAL HEADER #32    02014B50 (33639248)\n+512CF9 Created Zip Spec      14 (20) '2.0'\n+512CFA Created OS            00 (0) 'MS-DOS'\n+512CFB Extract Zip Spec      14 (20) '2.0'\n+512CFC Extract OS            00 (0) 'MS-DOS'\n+512CFD General Purpose Flag  0000 (0)\n+512CFF Compression Method    0000 (0) 'Stored'\n+512D01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512D05 CRC                   00000000 (0)\n+512D09 Compressed Size       00000000 (0)\n+512D0D Uncompressed Size     00000000 (0)\n+512D11 Filename Length       006E (110)\n+512D13 Extra Length          0009 (9)\n+512D15 Comment Length        0000 (0)\n+512D17 Disk Start            0000 (0)\n+512D19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512D1B Ext File Attributes   00000000 (0)\n+512D1F Local Header Offset   0001FEF7 (130807)\n+512D23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512D23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512D91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512D93   Length              0005 (5)\n+512D95   Flags               01 (1) 'Modification'\n+512D96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512D9A CENTRAL HEADER #33    02014B50 (33639248)\n+512D9E Created Zip Spec      14 (20) '2.0'\n+512D9F Created OS            00 (0) 'MS-DOS'\n+512DA0 Extract Zip Spec      14 (20) '2.0'\n+512DA1 Extract OS            00 (0) 'MS-DOS'\n+512DA2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512DA4 Compression Method    0000 (0) 'Stored'\n+512DA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512DAA CRC                   1BE163AC (467755948)\n+512DAE Compressed Size       00000967 (2407)\n+512DB2 Uncompressed Size     00000967 (2407)\n+512DB6 Filename Length       0084 (132)\n+512DB8 Extra Length          0009 (9)\n+512DBA Comment Length        0000 (0)\n+512DBC Disk Start            0000 (0)\n+512DBE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512DC0 Ext File Attributes   00000000 (0)\n+512DC4 Local Header Offset   0001FF8C (130956)\n+512DC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x512E49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x512DC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-512ECD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512ECF   Length              0005 (5)\n-512ED1   Flags               01 (1) 'Modification'\n-512ED2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512ED6 CENTRAL HEADER #34    02014B50 (33639248)\n-512EDA Created Zip Spec      14 (20) '2.0'\n-512EDB Created OS            00 (0) 'MS-DOS'\n-512EDC Extract Zip Spec      14 (20) '2.0'\n-512EDD Extract OS            00 (0) 'MS-DOS'\n-512EDE General Purpose Flag  0000 (0)\n-512EE0 Compression Method    0000 (0) 'Stored'\n-512EE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512EE6 CRC                   00000000 (0)\n-512EEA Compressed Size       00000000 (0)\n-512EEE Uncompressed Size     00000000 (0)\n-512EF2 Filename Length       0068 (104)\n-512EF4 Extra Length          0009 (9)\n-512EF6 Comment Length        0000 (0)\n-512EF8 Disk Start            0000 (0)\n-512EFA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512EFC Ext File Attributes   00000000 (0)\n-512F00 Local Header Offset   00020A17 (133655)\n-512F04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512F04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-512F6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-512F6E   Length              0005 (5)\n-512F70   Flags               01 (1) 'Modification'\n-512F71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-512F75 CENTRAL HEADER #35    02014B50 (33639248)\n-512F79 Created Zip Spec      14 (20) '2.0'\n-512F7A Created OS            00 (0) 'MS-DOS'\n-512F7B Extract Zip Spec      14 (20) '2.0'\n-512F7C Extract OS            00 (0) 'MS-DOS'\n-512F7D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-512F7F Compression Method    0000 (0) 'Stored'\n-512F81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-512F85 CRC                   11DB1110 (299569424)\n-512F89 Compressed Size       0000080F (2063)\n-512F8D Uncompressed Size     0000080F (2063)\n-512F91 Filename Length       007E (126)\n-512F93 Extra Length          0009 (9)\n-512F95 Comment Length        0000 (0)\n-512F97 Disk Start            0000 (0)\n-512F99 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-512F9B Ext File Attributes   00000000 (0)\n-512F9F Local Header Offset   00020AA6 (133798)\n-512FA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x512FA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513023   Length              0005 (5)\n-513025   Flags               01 (1) 'Modification'\n-513026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51302A CENTRAL HEADER #36    02014B50 (33639248)\n-51302E Created Zip Spec      14 (20) '2.0'\n-51302F Created OS            00 (0) 'MS-DOS'\n-513030 Extract Zip Spec      14 (20) '2.0'\n-513031 Extract OS            00 (0) 'MS-DOS'\n-513032 General Purpose Flag  0000 (0)\n-513034 Compression Method    0000 (0) 'Stored'\n-513036 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51303A CRC                   00000000 (0)\n-51303E Compressed Size       00000000 (0)\n-513042 Uncompressed Size     00000000 (0)\n-513046 Filename Length       0064 (100)\n-513048 Extra Length          0009 (9)\n-51304A Comment Length        0000 (0)\n-51304C Disk Start            0000 (0)\n-51304E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513050 Ext File Attributes   00000000 (0)\n-513054 Local Header Offset   0002136A (136042)\n-513058 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513058: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5130BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5130BE   Length              0005 (5)\n-5130C0   Flags               01 (1) 'Modification'\n-5130C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5130C5 CENTRAL HEADER #37    02014B50 (33639248)\n-5130C9 Created Zip Spec      14 (20) '2.0'\n-5130CA Created OS            00 (0) 'MS-DOS'\n-5130CB Extract Zip Spec      14 (20) '2.0'\n-5130CC Extract OS            00 (0) 'MS-DOS'\n-5130CD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5130CF Compression Method    0000 (0) 'Stored'\n-5130D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5130D5 CRC                   30A69673 (816223859)\n-5130D9 Compressed Size       00000C1C (3100)\n-5130DD Uncompressed Size     00000C1C (3100)\n-5130E1 Filename Length       007A (122)\n-5130E3 Extra Length          0009 (9)\n-5130E5 Comment Length        0000 (0)\n-5130E7 Disk Start            0000 (0)\n-5130E9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5130EB Ext File Attributes   00000000 (0)\n-5130EF Local Header Offset   000213F5 (136181)\n-5130F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5130F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51316D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51316F   Length              0005 (5)\n-513171   Flags               01 (1) 'Modification'\n-513172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513176 CENTRAL HEADER #38    02014B50 (33639248)\n-51317A Created Zip Spec      14 (20) '2.0'\n-51317B Created OS            00 (0) 'MS-DOS'\n-51317C Extract Zip Spec      14 (20) '2.0'\n-51317D Extract OS            00 (0) 'MS-DOS'\n-51317E General Purpose Flag  0000 (0)\n-513180 Compression Method    0000 (0) 'Stored'\n-513182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513186 CRC                   00000000 (0)\n-51318A Compressed Size       00000000 (0)\n-51318E Uncompressed Size     00000000 (0)\n-513192 Filename Length       006E (110)\n-513194 Extra Length          0009 (9)\n-513196 Comment Length        0000 (0)\n-513198 Disk Start            0000 (0)\n-51319A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51319C Ext File Attributes   00000000 (0)\n-5131A0 Local Header Offset   000220C2 (139458)\n-5131A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5131A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513212 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513214   Length              0005 (5)\n-513216   Flags               01 (1) 'Modification'\n-513217   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51321B CENTRAL HEADER #39    02014B50 (33639248)\n-51321F Created Zip Spec      14 (20) '2.0'\n-513220 Created OS            00 (0) 'MS-DOS'\n-513221 Extract Zip Spec      14 (20) '2.0'\n-513222 Extract OS            00 (0) 'MS-DOS'\n-513223 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513225 Compression Method    0000 (0) 'Stored'\n-513227 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51322B CRC                   0C316B32 (204565298)\n-51322F Compressed Size       000006D7 (1751)\n-513233 Uncompressed Size     000006D7 (1751)\n-513237 Filename Length       0084 (132)\n-513239 Extra Length          0009 (9)\n-51323B Comment Length        0000 (0)\n-51323D Disk Start            0000 (0)\n-51323F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513241 Ext File Attributes   00000000 (0)\n-513245 Local Header Offset   00022157 (139607)\n-513249 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+512E4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512E4E   Length              0005 (5)\n+512E50   Flags               01 (1) 'Modification'\n+512E51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512E55 CENTRAL HEADER #34    02014B50 (33639248)\n+512E59 Created Zip Spec      14 (20) '2.0'\n+512E5A Created OS            00 (0) 'MS-DOS'\n+512E5B Extract Zip Spec      14 (20) '2.0'\n+512E5C Extract OS            00 (0) 'MS-DOS'\n+512E5D General Purpose Flag  0000 (0)\n+512E5F Compression Method    0000 (0) 'Stored'\n+512E61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512E65 CRC                   00000000 (0)\n+512E69 Compressed Size       00000000 (0)\n+512E6D Uncompressed Size     00000000 (0)\n+512E71 Filename Length       0068 (104)\n+512E73 Extra Length          0009 (9)\n+512E75 Comment Length        0000 (0)\n+512E77 Disk Start            0000 (0)\n+512E79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512E7B Ext File Attributes   00000000 (0)\n+512E7F Local Header Offset   000209AE (133550)\n+512E83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512E83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512EEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512EED   Length              0005 (5)\n+512EEF   Flags               01 (1) 'Modification'\n+512EF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512EF4 CENTRAL HEADER #35    02014B50 (33639248)\n+512EF8 Created Zip Spec      14 (20) '2.0'\n+512EF9 Created OS            00 (0) 'MS-DOS'\n+512EFA Extract Zip Spec      14 (20) '2.0'\n+512EFB Extract OS            00 (0) 'MS-DOS'\n+512EFC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+512EFE Compression Method    0000 (0) 'Stored'\n+512F00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512F04 CRC                   11DB1110 (299569424)\n+512F08 Compressed Size       0000080F (2063)\n+512F0C Uncompressed Size     0000080F (2063)\n+512F10 Filename Length       007E (126)\n+512F12 Extra Length          0009 (9)\n+512F14 Comment Length        0000 (0)\n+512F16 Disk Start            0000 (0)\n+512F18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512F1A Ext File Attributes   00000000 (0)\n+512F1E Local Header Offset   00020A3D (133693)\n+512F22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512F22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+512FA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+512FA2   Length              0005 (5)\n+512FA4   Flags               01 (1) 'Modification'\n+512FA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+512FA9 CENTRAL HEADER #36    02014B50 (33639248)\n+512FAD Created Zip Spec      14 (20) '2.0'\n+512FAE Created OS            00 (0) 'MS-DOS'\n+512FAF Extract Zip Spec      14 (20) '2.0'\n+512FB0 Extract OS            00 (0) 'MS-DOS'\n+512FB1 General Purpose Flag  0000 (0)\n+512FB3 Compression Method    0000 (0) 'Stored'\n+512FB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+512FB9 CRC                   00000000 (0)\n+512FBD Compressed Size       00000000 (0)\n+512FC1 Uncompressed Size     00000000 (0)\n+512FC5 Filename Length       0064 (100)\n+512FC7 Extra Length          0009 (9)\n+512FC9 Comment Length        0000 (0)\n+512FCB Disk Start            0000 (0)\n+512FCD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+512FCF Ext File Attributes   00000000 (0)\n+512FD3 Local Header Offset   00021301 (135937)\n+512FD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x512FD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51303B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51303D   Length              0005 (5)\n+51303F   Flags               01 (1) 'Modification'\n+513040   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513044 CENTRAL HEADER #37    02014B50 (33639248)\n+513048 Created Zip Spec      14 (20) '2.0'\n+513049 Created OS            00 (0) 'MS-DOS'\n+51304A Extract Zip Spec      14 (20) '2.0'\n+51304B Extract OS            00 (0) 'MS-DOS'\n+51304C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51304E Compression Method    0000 (0) 'Stored'\n+513050 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513054 CRC                   30A69673 (816223859)\n+513058 Compressed Size       00000C1C (3100)\n+51305C Uncompressed Size     00000C1C (3100)\n+513060 Filename Length       007A (122)\n+513062 Extra Length          0009 (9)\n+513064 Comment Length        0000 (0)\n+513066 Disk Start            0000 (0)\n+513068 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51306A Ext File Attributes   00000000 (0)\n+51306E Local Header Offset   0002138C (136076)\n+513072 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513072: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5130EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5130EE   Length              0005 (5)\n+5130F0   Flags               01 (1) 'Modification'\n+5130F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5130F5 CENTRAL HEADER #38    02014B50 (33639248)\n+5130F9 Created Zip Spec      14 (20) '2.0'\n+5130FA Created OS            00 (0) 'MS-DOS'\n+5130FB Extract Zip Spec      14 (20) '2.0'\n+5130FC Extract OS            00 (0) 'MS-DOS'\n+5130FD General Purpose Flag  0000 (0)\n+5130FF Compression Method    0000 (0) 'Stored'\n+513101 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513105 CRC                   00000000 (0)\n+513109 Compressed Size       00000000 (0)\n+51310D Uncompressed Size     00000000 (0)\n+513111 Filename Length       006E (110)\n+513113 Extra Length          0009 (9)\n+513115 Comment Length        0000 (0)\n+513117 Disk Start            0000 (0)\n+513119 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51311B Ext File Attributes   00000000 (0)\n+51311F Local Header Offset   00022059 (139353)\n+513123 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513123: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513191 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513193   Length              0005 (5)\n+513195   Flags               01 (1) 'Modification'\n+513196   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51319A CENTRAL HEADER #39    02014B50 (33639248)\n+51319E Created Zip Spec      14 (20) '2.0'\n+51319F Created OS            00 (0) 'MS-DOS'\n+5131A0 Extract Zip Spec      14 (20) '2.0'\n+5131A1 Extract OS            00 (0) 'MS-DOS'\n+5131A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5131A4 Compression Method    0000 (0) 'Stored'\n+5131A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5131AA CRC                   0C316B32 (204565298)\n+5131AE Compressed Size       000006D7 (1751)\n+5131B2 Uncompressed Size     000006D7 (1751)\n+5131B6 Filename Length       0084 (132)\n+5131B8 Extra Length          0009 (9)\n+5131BA Comment Length        0000 (0)\n+5131BC Disk Start            0000 (0)\n+5131BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5131C0 Ext File Attributes   00000000 (0)\n+5131C4 Local Header Offset   000220EE (139502)\n+5131C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x513249: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5131C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5132CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5132CF   Length              0005 (5)\n-5132D1   Flags               01 (1) 'Modification'\n-5132D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5132D6 CENTRAL HEADER #40    02014B50 (33639248)\n-5132DA Created Zip Spec      14 (20) '2.0'\n-5132DB Created OS            00 (0) 'MS-DOS'\n-5132DC Extract Zip Spec      14 (20) '2.0'\n-5132DD Extract OS            00 (0) 'MS-DOS'\n-5132DE General Purpose Flag  0000 (0)\n-5132E0 Compression Method    0000 (0) 'Stored'\n-5132E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5132E6 CRC                   00000000 (0)\n-5132EA Compressed Size       00000000 (0)\n-5132EE Uncompressed Size     00000000 (0)\n-5132F2 Filename Length       006A (106)\n-5132F4 Extra Length          0009 (9)\n-5132F6 Comment Length        0000 (0)\n-5132F8 Disk Start            0000 (0)\n-5132FA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5132FC Ext File Attributes   00000000 (0)\n-513300 Local Header Offset   000228E9 (141545)\n-513304 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513304: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51336E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513370   Length              0005 (5)\n-513372   Flags               01 (1) 'Modification'\n-513373   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513377 CENTRAL HEADER #41    02014B50 (33639248)\n-51337B Created Zip Spec      14 (20) '2.0'\n-51337C Created OS            00 (0) 'MS-DOS'\n-51337D Extract Zip Spec      14 (20) '2.0'\n-51337E Extract OS            00 (0) 'MS-DOS'\n-51337F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513381 Compression Method    0000 (0) 'Stored'\n-513383 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513387 CRC                   37BEEC96 (935259286)\n-51338B Compressed Size       0000133B (4923)\n-51338F Uncompressed Size     0000133B (4923)\n-513393 Filename Length       0080 (128)\n-513395 Extra Length          0009 (9)\n-513397 Comment Length        0000 (0)\n-513399 Disk Start            0000 (0)\n-51339B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51339D Ext File Attributes   00000000 (0)\n-5133A1 Local Header Offset   0002297A (141690)\n-5133A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5133A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513425 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513427   Length              0005 (5)\n-513429   Flags               01 (1) 'Modification'\n-51342A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51342E CENTRAL HEADER #42    02014B50 (33639248)\n-513432 Created Zip Spec      14 (20) '2.0'\n-513433 Created OS            00 (0) 'MS-DOS'\n-513434 Extract Zip Spec      14 (20) '2.0'\n-513435 Extract OS            00 (0) 'MS-DOS'\n-513436 General Purpose Flag  0000 (0)\n-513438 Compression Method    0000 (0) 'Stored'\n-51343A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51343E CRC                   00000000 (0)\n-513442 Compressed Size       00000000 (0)\n-513446 Uncompressed Size     00000000 (0)\n-51344A Filename Length       0072 (114)\n-51344C Extra Length          0009 (9)\n-51344E Comment Length        0000 (0)\n-513450 Disk Start            0000 (0)\n-513452 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513454 Ext File Attributes   00000000 (0)\n-513458 Local Header Offset   00023D6C (146796)\n-51345C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51345C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5134CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5134D0   Length              0005 (5)\n-5134D2   Flags               01 (1) 'Modification'\n-5134D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5134D7 CENTRAL HEADER #43    02014B50 (33639248)\n-5134DB Created Zip Spec      14 (20) '2.0'\n-5134DC Created OS            00 (0) 'MS-DOS'\n-5134DD Extract Zip Spec      14 (20) '2.0'\n-5134DE Extract OS            00 (0) 'MS-DOS'\n-5134DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5134E1 Compression Method    0000 (0) 'Stored'\n-5134E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5134E7 CRC                   D0AE7BE4 (3501095908)\n-5134EB Compressed Size       0000074C (1868)\n-5134EF Uncompressed Size     0000074C (1868)\n-5134F3 Filename Length       0088 (136)\n-5134F5 Extra Length          0009 (9)\n-5134F7 Comment Length        0000 (0)\n-5134F9 Disk Start            0000 (0)\n-5134FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5134FD Ext File Attributes   00000000 (0)\n-513501 Local Header Offset   00023E05 (146949)\n-513505 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51324C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51324E   Length              0005 (5)\n+513250   Flags               01 (1) 'Modification'\n+513251   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513255 CENTRAL HEADER #40    02014B50 (33639248)\n+513259 Created Zip Spec      14 (20) '2.0'\n+51325A Created OS            00 (0) 'MS-DOS'\n+51325B Extract Zip Spec      14 (20) '2.0'\n+51325C Extract OS            00 (0) 'MS-DOS'\n+51325D General Purpose Flag  0000 (0)\n+51325F Compression Method    0000 (0) 'Stored'\n+513261 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513265 CRC                   00000000 (0)\n+513269 Compressed Size       00000000 (0)\n+51326D Uncompressed Size     00000000 (0)\n+513271 Filename Length       006A (106)\n+513273 Extra Length          0009 (9)\n+513275 Comment Length        0000 (0)\n+513277 Disk Start            0000 (0)\n+513279 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51327B Ext File Attributes   00000000 (0)\n+51327F Local Header Offset   00022880 (141440)\n+513283 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513283: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5132ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5132EF   Length              0005 (5)\n+5132F1   Flags               01 (1) 'Modification'\n+5132F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5132F6 CENTRAL HEADER #41    02014B50 (33639248)\n+5132FA Created Zip Spec      14 (20) '2.0'\n+5132FB Created OS            00 (0) 'MS-DOS'\n+5132FC Extract Zip Spec      14 (20) '2.0'\n+5132FD Extract OS            00 (0) 'MS-DOS'\n+5132FE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513300 Compression Method    0000 (0) 'Stored'\n+513302 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513306 CRC                   37BEEC96 (935259286)\n+51330A Compressed Size       0000133B (4923)\n+51330E Uncompressed Size     0000133B (4923)\n+513312 Filename Length       0080 (128)\n+513314 Extra Length          0009 (9)\n+513316 Comment Length        0000 (0)\n+513318 Disk Start            0000 (0)\n+51331A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51331C Ext File Attributes   00000000 (0)\n+513320 Local Header Offset   00022911 (141585)\n+513324 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513324: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5133A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5133A6   Length              0005 (5)\n+5133A8   Flags               01 (1) 'Modification'\n+5133A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5133AD CENTRAL HEADER #42    02014B50 (33639248)\n+5133B1 Created Zip Spec      14 (20) '2.0'\n+5133B2 Created OS            00 (0) 'MS-DOS'\n+5133B3 Extract Zip Spec      14 (20) '2.0'\n+5133B4 Extract OS            00 (0) 'MS-DOS'\n+5133B5 General Purpose Flag  0000 (0)\n+5133B7 Compression Method    0000 (0) 'Stored'\n+5133B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5133BD CRC                   00000000 (0)\n+5133C1 Compressed Size       00000000 (0)\n+5133C5 Uncompressed Size     00000000 (0)\n+5133C9 Filename Length       0072 (114)\n+5133CB Extra Length          0009 (9)\n+5133CD Comment Length        0000 (0)\n+5133CF Disk Start            0000 (0)\n+5133D1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5133D3 Ext File Attributes   00000000 (0)\n+5133D7 Local Header Offset   00023D03 (146691)\n+5133DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5133DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51344D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51344F   Length              0005 (5)\n+513451   Flags               01 (1) 'Modification'\n+513452   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513456 CENTRAL HEADER #43    02014B50 (33639248)\n+51345A Created Zip Spec      14 (20) '2.0'\n+51345B Created OS            00 (0) 'MS-DOS'\n+51345C Extract Zip Spec      14 (20) '2.0'\n+51345D Extract OS            00 (0) 'MS-DOS'\n+51345E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513460 Compression Method    0000 (0) 'Stored'\n+513462 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513466 CRC                   D0AE7BE4 (3501095908)\n+51346A Compressed Size       0000074C (1868)\n+51346E Uncompressed Size     0000074C (1868)\n+513472 Filename Length       0088 (136)\n+513474 Extra Length          0009 (9)\n+513476 Comment Length        0000 (0)\n+513478 Disk Start            0000 (0)\n+51347A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51347C Ext File Attributes   00000000 (0)\n+513480 Local Header Offset   00023D9C (146844)\n+513484 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x513505: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513484: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51358D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51358F   Length              0005 (5)\n-513591   Flags               01 (1) 'Modification'\n-513592   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513596 CENTRAL HEADER #44    02014B50 (33639248)\n-51359A Created Zip Spec      14 (20) '2.0'\n-51359B Created OS            00 (0) 'MS-DOS'\n-51359C Extract Zip Spec      14 (20) '2.0'\n-51359D Extract OS            00 (0) 'MS-DOS'\n-51359E General Purpose Flag  0000 (0)\n-5135A0 Compression Method    0000 (0) 'Stored'\n-5135A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5135A6 CRC                   00000000 (0)\n-5135AA Compressed Size       00000000 (0)\n-5135AE Uncompressed Size     00000000 (0)\n-5135B2 Filename Length       006E (110)\n-5135B4 Extra Length          0009 (9)\n-5135B6 Comment Length        0000 (0)\n-5135B8 Disk Start            0000 (0)\n-5135BA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5135BC Ext File Attributes   00000000 (0)\n-5135C0 Local Header Offset   00024610 (149008)\n-5135C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5135C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513632 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513634   Length              0005 (5)\n-513636   Flags               01 (1) 'Modification'\n-513637   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51363B CENTRAL HEADER #45    02014B50 (33639248)\n-51363F Created Zip Spec      14 (20) '2.0'\n-513640 Created OS            00 (0) 'MS-DOS'\n-513641 Extract Zip Spec      14 (20) '2.0'\n-513642 Extract OS            00 (0) 'MS-DOS'\n-513643 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513645 Compression Method    0000 (0) 'Stored'\n-513647 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51364B CRC                   4C134CE6 (1276333286)\n-51364F Compressed Size       0000103C (4156)\n-513653 Uncompressed Size     0000103C (4156)\n-513657 Filename Length       0084 (132)\n-513659 Extra Length          0009 (9)\n-51365B Comment Length        0000 (0)\n-51365D Disk Start            0000 (0)\n-51365F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513661 Ext File Attributes   00000000 (0)\n-513665 Local Header Offset   000246A5 (149157)\n-513669 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51350C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51350E   Length              0005 (5)\n+513510   Flags               01 (1) 'Modification'\n+513511   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513515 CENTRAL HEADER #44    02014B50 (33639248)\n+513519 Created Zip Spec      14 (20) '2.0'\n+51351A Created OS            00 (0) 'MS-DOS'\n+51351B Extract Zip Spec      14 (20) '2.0'\n+51351C Extract OS            00 (0) 'MS-DOS'\n+51351D General Purpose Flag  0000 (0)\n+51351F Compression Method    0000 (0) 'Stored'\n+513521 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513525 CRC                   00000000 (0)\n+513529 Compressed Size       00000000 (0)\n+51352D Uncompressed Size     00000000 (0)\n+513531 Filename Length       006E (110)\n+513533 Extra Length          0009 (9)\n+513535 Comment Length        0000 (0)\n+513537 Disk Start            0000 (0)\n+513539 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51353B Ext File Attributes   00000000 (0)\n+51353F Local Header Offset   000245A7 (148903)\n+513543 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513543: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5135B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5135B3   Length              0005 (5)\n+5135B5   Flags               01 (1) 'Modification'\n+5135B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5135BA CENTRAL HEADER #45    02014B50 (33639248)\n+5135BE Created Zip Spec      14 (20) '2.0'\n+5135BF Created OS            00 (0) 'MS-DOS'\n+5135C0 Extract Zip Spec      14 (20) '2.0'\n+5135C1 Extract OS            00 (0) 'MS-DOS'\n+5135C2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5135C4 Compression Method    0000 (0) 'Stored'\n+5135C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5135CA CRC                   4C134CE6 (1276333286)\n+5135CE Compressed Size       0000103C (4156)\n+5135D2 Uncompressed Size     0000103C (4156)\n+5135D6 Filename Length       0084 (132)\n+5135D8 Extra Length          0009 (9)\n+5135DA Comment Length        0000 (0)\n+5135DC Disk Start            0000 (0)\n+5135DE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5135E0 Ext File Attributes   00000000 (0)\n+5135E4 Local Header Offset   0002463C (149052)\n+5135E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x513669: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5135E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5136ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5136EF   Length              0005 (5)\n-5136F1   Flags               01 (1) 'Modification'\n-5136F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5136F6 CENTRAL HEADER #46    02014B50 (33639248)\n-5136FA Created Zip Spec      14 (20) '2.0'\n-5136FB Created OS            00 (0) 'MS-DOS'\n-5136FC Extract Zip Spec      14 (20) '2.0'\n-5136FD Extract OS            00 (0) 'MS-DOS'\n-5136FE General Purpose Flag  0000 (0)\n-513700 Compression Method    0000 (0) 'Stored'\n-513702 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513706 CRC                   00000000 (0)\n-51370A Compressed Size       00000000 (0)\n-51370E Uncompressed Size     00000000 (0)\n-513712 Filename Length       0070 (112)\n-513714 Extra Length          0009 (9)\n-513716 Comment Length        0000 (0)\n-513718 Disk Start            0000 (0)\n-51371A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51371C Ext File Attributes   00000000 (0)\n-513720 Local Header Offset   0002579C (153500)\n-513724 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513724: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513794 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513796   Length              0005 (5)\n-513798   Flags               01 (1) 'Modification'\n-513799   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51379D CENTRAL HEADER #47    02014B50 (33639248)\n-5137A1 Created Zip Spec      14 (20) '2.0'\n-5137A2 Created OS            00 (0) 'MS-DOS'\n-5137A3 Extract Zip Spec      14 (20) '2.0'\n-5137A4 Extract OS            00 (0) 'MS-DOS'\n-5137A5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5137A7 Compression Method    0000 (0) 'Stored'\n-5137A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5137AD CRC                   63086228 (1661493800)\n-5137B1 Compressed Size       00000838 (2104)\n-5137B5 Uncompressed Size     00000838 (2104)\n-5137B9 Filename Length       0086 (134)\n-5137BB Extra Length          0009 (9)\n-5137BD Comment Length        0000 (0)\n-5137BF Disk Start            0000 (0)\n-5137C1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5137C3 Ext File Attributes   00000000 (0)\n-5137C7 Local Header Offset   00025833 (153651)\n-5137CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51366C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51366E   Length              0005 (5)\n+513670   Flags               01 (1) 'Modification'\n+513671   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513675 CENTRAL HEADER #46    02014B50 (33639248)\n+513679 Created Zip Spec      14 (20) '2.0'\n+51367A Created OS            00 (0) 'MS-DOS'\n+51367B Extract Zip Spec      14 (20) '2.0'\n+51367C Extract OS            00 (0) 'MS-DOS'\n+51367D General Purpose Flag  0000 (0)\n+51367F Compression Method    0000 (0) 'Stored'\n+513681 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513685 CRC                   00000000 (0)\n+513689 Compressed Size       00000000 (0)\n+51368D Uncompressed Size     00000000 (0)\n+513691 Filename Length       0070 (112)\n+513693 Extra Length          0009 (9)\n+513695 Comment Length        0000 (0)\n+513697 Disk Start            0000 (0)\n+513699 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51369B Ext File Attributes   00000000 (0)\n+51369F Local Header Offset   00025733 (153395)\n+5136A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5136A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513713 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513715   Length              0005 (5)\n+513717   Flags               01 (1) 'Modification'\n+513718   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51371C CENTRAL HEADER #47    02014B50 (33639248)\n+513720 Created Zip Spec      14 (20) '2.0'\n+513721 Created OS            00 (0) 'MS-DOS'\n+513722 Extract Zip Spec      14 (20) '2.0'\n+513723 Extract OS            00 (0) 'MS-DOS'\n+513724 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513726 Compression Method    0000 (0) 'Stored'\n+513728 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51372C CRC                   63086228 (1661493800)\n+513730 Compressed Size       00000838 (2104)\n+513734 Uncompressed Size     00000838 (2104)\n+513738 Filename Length       0086 (134)\n+51373A Extra Length          0009 (9)\n+51373C Comment Length        0000 (0)\n+51373E Disk Start            0000 (0)\n+513740 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513742 Ext File Attributes   00000000 (0)\n+513746 Local Header Offset   000257CA (153546)\n+51374A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x5137CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51374A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-513851 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513853   Length              0005 (5)\n-513855   Flags               01 (1) 'Modification'\n-513856   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51385A CENTRAL HEADER #48    02014B50 (33639248)\n-51385E Created Zip Spec      14 (20) '2.0'\n-51385F Created OS            00 (0) 'MS-DOS'\n-513860 Extract Zip Spec      14 (20) '2.0'\n-513861 Extract OS            00 (0) 'MS-DOS'\n-513862 General Purpose Flag  0000 (0)\n-513864 Compression Method    0000 (0) 'Stored'\n-513866 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51386A CRC                   00000000 (0)\n-51386E Compressed Size       00000000 (0)\n-513872 Uncompressed Size     00000000 (0)\n-513876 Filename Length       006C (108)\n-513878 Extra Length          0009 (9)\n-51387A Comment Length        0000 (0)\n-51387C Disk Start            0000 (0)\n-51387E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513880 Ext File Attributes   00000000 (0)\n-513884 Local Header Offset   00026128 (155944)\n-513888 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513888: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5138F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5138F6   Length              0005 (5)\n-5138F8   Flags               01 (1) 'Modification'\n-5138F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5138FD CENTRAL HEADER #49    02014B50 (33639248)\n-513901 Created Zip Spec      14 (20) '2.0'\n-513902 Created OS            00 (0) 'MS-DOS'\n-513903 Extract Zip Spec      14 (20) '2.0'\n-513904 Extract OS            00 (0) 'MS-DOS'\n-513905 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513907 Compression Method    0000 (0) 'Stored'\n-513909 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51390D CRC                   9EF621C1 (2666930625)\n-513911 Compressed Size       00000C90 (3216)\n-513915 Uncompressed Size     00000C90 (3216)\n-513919 Filename Length       0082 (130)\n-51391B Extra Length          0009 (9)\n-51391D Comment Length        0000 (0)\n-51391F Disk Start            0000 (0)\n-513921 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513923 Ext File Attributes   00000000 (0)\n-513927 Local Header Offset   000261BB (156091)\n-51392B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51392B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5139AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5139AF   Length              0005 (5)\n-5139B1   Flags               01 (1) 'Modification'\n-5139B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5139B6 CENTRAL HEADER #50    02014B50 (33639248)\n-5139BA Created Zip Spec      14 (20) '2.0'\n-5139BB Created OS            00 (0) 'MS-DOS'\n-5139BC Extract Zip Spec      14 (20) '2.0'\n-5139BD Extract OS            00 (0) 'MS-DOS'\n-5139BE General Purpose Flag  0000 (0)\n-5139C0 Compression Method    0000 (0) 'Stored'\n-5139C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5139C6 CRC                   00000000 (0)\n-5139CA Compressed Size       00000000 (0)\n-5139CE Uncompressed Size     00000000 (0)\n-5139D2 Filename Length       0054 (84)\n-5139D4 Extra Length          0009 (9)\n-5139D6 Comment Length        0000 (0)\n-5139D8 Disk Start            0000 (0)\n-5139DA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5139DC Ext File Attributes   00000000 (0)\n-5139E0 Local Header Offset   00026F04 (159492)\n-5139E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5139E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513A38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513A3A   Length              0005 (5)\n-513A3C   Flags               01 (1) 'Modification'\n-513A3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513A41 CENTRAL HEADER #51    02014B50 (33639248)\n-513A45 Created Zip Spec      14 (20) '2.0'\n-513A46 Created OS            00 (0) 'MS-DOS'\n-513A47 Extract Zip Spec      14 (20) '2.0'\n-513A48 Extract OS            00 (0) 'MS-DOS'\n-513A49 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513A4B Compression Method    0000 (0) 'Stored'\n-513A4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513A51 CRC                   6BE0FFE8 (1809907688)\n-513A55 Compressed Size       00000EF6 (3830)\n-513A59 Uncompressed Size     00000EF6 (3830)\n-513A5D Filename Length       006A (106)\n-513A5F Extra Length          0009 (9)\n-513A61 Comment Length        0000 (0)\n-513A63 Disk Start            0000 (0)\n-513A65 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513A67 Ext File Attributes   00000000 (0)\n-513A6B Local Header Offset   00026F7F (159615)\n-513A6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513A6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513AD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513ADB   Length              0005 (5)\n-513ADD   Flags               01 (1) 'Modification'\n-513ADE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513AE2 CENTRAL HEADER #52    02014B50 (33639248)\n-513AE6 Created Zip Spec      14 (20) '2.0'\n-513AE7 Created OS            00 (0) 'MS-DOS'\n-513AE8 Extract Zip Spec      14 (20) '2.0'\n-513AE9 Extract OS            00 (0) 'MS-DOS'\n-513AEA General Purpose Flag  0000 (0)\n-513AEC Compression Method    0000 (0) 'Stored'\n-513AEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513AF2 CRC                   00000000 (0)\n-513AF6 Compressed Size       00000000 (0)\n-513AFA Uncompressed Size     00000000 (0)\n-513AFE Filename Length       0059 (89)\n-513B00 Extra Length          0009 (9)\n-513B02 Comment Length        0000 (0)\n-513B04 Disk Start            0000 (0)\n-513B06 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513B08 Ext File Attributes   00000000 (0)\n-513B0C Local Header Offset   00027F16 (163606)\n-513B10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513B10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513B69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513B6B   Length              0005 (5)\n-513B6D   Flags               01 (1) 'Modification'\n-513B6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513B72 CENTRAL HEADER #53    02014B50 (33639248)\n-513B76 Created Zip Spec      14 (20) '2.0'\n-513B77 Created OS            00 (0) 'MS-DOS'\n-513B78 Extract Zip Spec      14 (20) '2.0'\n-513B79 Extract OS            00 (0) 'MS-DOS'\n-513B7A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513B7C Compression Method    0000 (0) 'Stored'\n-513B7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513B82 CRC                   8743913D (2269352253)\n-513B86 Compressed Size       00000C44 (3140)\n-513B8A Uncompressed Size     00000C44 (3140)\n-513B8E Filename Length       006F (111)\n-513B90 Extra Length          0009 (9)\n-513B92 Comment Length        0000 (0)\n-513B94 Disk Start            0000 (0)\n-513B96 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513B98 Ext File Attributes   00000000 (0)\n-513B9C Local Header Offset   00027F96 (163734)\n-513BA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513BA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513C0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513C11   Length              0005 (5)\n-513C13   Flags               01 (1) 'Modification'\n-513C14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513C18 CENTRAL HEADER #54    02014B50 (33639248)\n-513C1C Created Zip Spec      14 (20) '2.0'\n-513C1D Created OS            00 (0) 'MS-DOS'\n-513C1E Extract Zip Spec      14 (20) '2.0'\n-513C1F Extract OS            00 (0) 'MS-DOS'\n-513C20 General Purpose Flag  0000 (0)\n-513C22 Compression Method    0000 (0) 'Stored'\n-513C24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513C28 CRC                   00000000 (0)\n-513C2C Compressed Size       00000000 (0)\n-513C30 Uncompressed Size     00000000 (0)\n-513C34 Filename Length       0074 (116)\n-513C36 Extra Length          0009 (9)\n-513C38 Comment Length        0000 (0)\n-513C3A Disk Start            0000 (0)\n-513C3C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513C3E Ext File Attributes   00000000 (0)\n-513C42 Local Header Offset   00028C80 (167040)\n-513C46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513C46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513CBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513CBC   Length              0005 (5)\n-513CBE   Flags               01 (1) 'Modification'\n-513CBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513CC3 CENTRAL HEADER #55    02014B50 (33639248)\n-513CC7 Created Zip Spec      14 (20) '2.0'\n-513CC8 Created OS            00 (0) 'MS-DOS'\n-513CC9 Extract Zip Spec      14 (20) '2.0'\n-513CCA Extract OS            00 (0) 'MS-DOS'\n-513CCB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513CCD Compression Method    0000 (0) 'Stored'\n-513CCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513CD3 CRC                   07A59EC9 (128294601)\n-513CD7 Compressed Size       00000C29 (3113)\n-513CDB Uncompressed Size     00000C29 (3113)\n-513CDF Filename Length       008A (138)\n-513CE1 Extra Length          0009 (9)\n-513CE3 Comment Length        0000 (0)\n-513CE5 Disk Start            0000 (0)\n-513CE7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513CE9 Ext File Attributes   00000000 (0)\n-513CED Local Header Offset   00028D1B (167195)\n-513CF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5137D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5137D2   Length              0005 (5)\n+5137D4   Flags               01 (1) 'Modification'\n+5137D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5137D9 CENTRAL HEADER #48    02014B50 (33639248)\n+5137DD Created Zip Spec      14 (20) '2.0'\n+5137DE Created OS            00 (0) 'MS-DOS'\n+5137DF Extract Zip Spec      14 (20) '2.0'\n+5137E0 Extract OS            00 (0) 'MS-DOS'\n+5137E1 General Purpose Flag  0000 (0)\n+5137E3 Compression Method    0000 (0) 'Stored'\n+5137E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5137E9 CRC                   00000000 (0)\n+5137ED Compressed Size       00000000 (0)\n+5137F1 Uncompressed Size     00000000 (0)\n+5137F5 Filename Length       006C (108)\n+5137F7 Extra Length          0009 (9)\n+5137F9 Comment Length        0000 (0)\n+5137FB Disk Start            0000 (0)\n+5137FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5137FF Ext File Attributes   00000000 (0)\n+513803 Local Header Offset   000260BF (155839)\n+513807 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513807: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513873 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513875   Length              0005 (5)\n+513877   Flags               01 (1) 'Modification'\n+513878   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51387C CENTRAL HEADER #49    02014B50 (33639248)\n+513880 Created Zip Spec      14 (20) '2.0'\n+513881 Created OS            00 (0) 'MS-DOS'\n+513882 Extract Zip Spec      14 (20) '2.0'\n+513883 Extract OS            00 (0) 'MS-DOS'\n+513884 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513886 Compression Method    0000 (0) 'Stored'\n+513888 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51388C CRC                   9EF621C1 (2666930625)\n+513890 Compressed Size       00000C90 (3216)\n+513894 Uncompressed Size     00000C90 (3216)\n+513898 Filename Length       0082 (130)\n+51389A Extra Length          0009 (9)\n+51389C Comment Length        0000 (0)\n+51389E Disk Start            0000 (0)\n+5138A0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5138A2 Ext File Attributes   00000000 (0)\n+5138A6 Local Header Offset   00026152 (155986)\n+5138AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5138AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51392C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51392E   Length              0005 (5)\n+513930   Flags               01 (1) 'Modification'\n+513931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513935 CENTRAL HEADER #50    02014B50 (33639248)\n+513939 Created Zip Spec      14 (20) '2.0'\n+51393A Created OS            00 (0) 'MS-DOS'\n+51393B Extract Zip Spec      14 (20) '2.0'\n+51393C Extract OS            00 (0) 'MS-DOS'\n+51393D General Purpose Flag  0000 (0)\n+51393F Compression Method    0000 (0) 'Stored'\n+513941 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513945 CRC                   00000000 (0)\n+513949 Compressed Size       00000000 (0)\n+51394D Uncompressed Size     00000000 (0)\n+513951 Filename Length       0054 (84)\n+513953 Extra Length          0009 (9)\n+513955 Comment Length        0000 (0)\n+513957 Disk Start            0000 (0)\n+513959 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51395B Ext File Attributes   00000000 (0)\n+51395F Local Header Offset   00026E9B (159387)\n+513963 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513963: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5139B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5139B9   Length              0005 (5)\n+5139BB   Flags               01 (1) 'Modification'\n+5139BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5139C0 CENTRAL HEADER #51    02014B50 (33639248)\n+5139C4 Created Zip Spec      14 (20) '2.0'\n+5139C5 Created OS            00 (0) 'MS-DOS'\n+5139C6 Extract Zip Spec      14 (20) '2.0'\n+5139C7 Extract OS            00 (0) 'MS-DOS'\n+5139C8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5139CA Compression Method    0000 (0) 'Stored'\n+5139CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5139D0 CRC                   6BE0FFE8 (1809907688)\n+5139D4 Compressed Size       00000EF6 (3830)\n+5139D8 Uncompressed Size     00000EF6 (3830)\n+5139DC Filename Length       006A (106)\n+5139DE Extra Length          0009 (9)\n+5139E0 Comment Length        0000 (0)\n+5139E2 Disk Start            0000 (0)\n+5139E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5139E6 Ext File Attributes   00000000 (0)\n+5139EA Local Header Offset   00026F16 (159510)\n+5139EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5139EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513A58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513A5A   Length              0005 (5)\n+513A5C   Flags               01 (1) 'Modification'\n+513A5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513A61 CENTRAL HEADER #52    02014B50 (33639248)\n+513A65 Created Zip Spec      14 (20) '2.0'\n+513A66 Created OS            00 (0) 'MS-DOS'\n+513A67 Extract Zip Spec      14 (20) '2.0'\n+513A68 Extract OS            00 (0) 'MS-DOS'\n+513A69 General Purpose Flag  0000 (0)\n+513A6B Compression Method    0000 (0) 'Stored'\n+513A6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513A71 CRC                   00000000 (0)\n+513A75 Compressed Size       00000000 (0)\n+513A79 Uncompressed Size     00000000 (0)\n+513A7D Filename Length       0059 (89)\n+513A7F Extra Length          0009 (9)\n+513A81 Comment Length        0000 (0)\n+513A83 Disk Start            0000 (0)\n+513A85 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513A87 Ext File Attributes   00000000 (0)\n+513A8B Local Header Offset   00027EAD (163501)\n+513A8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513A8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513AE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513AEA   Length              0005 (5)\n+513AEC   Flags               01 (1) 'Modification'\n+513AED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513AF1 CENTRAL HEADER #53    02014B50 (33639248)\n+513AF5 Created Zip Spec      14 (20) '2.0'\n+513AF6 Created OS            00 (0) 'MS-DOS'\n+513AF7 Extract Zip Spec      14 (20) '2.0'\n+513AF8 Extract OS            00 (0) 'MS-DOS'\n+513AF9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513AFB Compression Method    0000 (0) 'Stored'\n+513AFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513B01 CRC                   8743913D (2269352253)\n+513B05 Compressed Size       00000C44 (3140)\n+513B09 Uncompressed Size     00000C44 (3140)\n+513B0D Filename Length       006F (111)\n+513B0F Extra Length          0009 (9)\n+513B11 Comment Length        0000 (0)\n+513B13 Disk Start            0000 (0)\n+513B15 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513B17 Ext File Attributes   00000000 (0)\n+513B1B Local Header Offset   00027F2D (163629)\n+513B1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513B1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513B8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513B90   Length              0005 (5)\n+513B92   Flags               01 (1) 'Modification'\n+513B93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513B97 CENTRAL HEADER #54    02014B50 (33639248)\n+513B9B Created Zip Spec      14 (20) '2.0'\n+513B9C Created OS            00 (0) 'MS-DOS'\n+513B9D Extract Zip Spec      14 (20) '2.0'\n+513B9E Extract OS            00 (0) 'MS-DOS'\n+513B9F General Purpose Flag  0000 (0)\n+513BA1 Compression Method    0000 (0) 'Stored'\n+513BA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513BA7 CRC                   00000000 (0)\n+513BAB Compressed Size       00000000 (0)\n+513BAF Uncompressed Size     00000000 (0)\n+513BB3 Filename Length       0074 (116)\n+513BB5 Extra Length          0009 (9)\n+513BB7 Comment Length        0000 (0)\n+513BB9 Disk Start            0000 (0)\n+513BBB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513BBD Ext File Attributes   00000000 (0)\n+513BC1 Local Header Offset   00028C17 (166935)\n+513BC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513BC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513C39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513C3B   Length              0005 (5)\n+513C3D   Flags               01 (1) 'Modification'\n+513C3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513C42 CENTRAL HEADER #55    02014B50 (33639248)\n+513C46 Created Zip Spec      14 (20) '2.0'\n+513C47 Created OS            00 (0) 'MS-DOS'\n+513C48 Extract Zip Spec      14 (20) '2.0'\n+513C49 Extract OS            00 (0) 'MS-DOS'\n+513C4A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513C4C Compression Method    0000 (0) 'Stored'\n+513C4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513C52 CRC                   07A59EC9 (128294601)\n+513C56 Compressed Size       00000C29 (3113)\n+513C5A Uncompressed Size     00000C29 (3113)\n+513C5E Filename Length       008A (138)\n+513C60 Extra Length          0009 (9)\n+513C62 Comment Length        0000 (0)\n+513C64 Disk Start            0000 (0)\n+513C66 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513C68 Ext File Attributes   00000000 (0)\n+513C6C Local Header Offset   00028CB2 (167090)\n+513C70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXX'\n #\n-# WARNING: Offset 0x513CF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513C70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-513D7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513D7D   Length              0005 (5)\n-513D7F   Flags               01 (1) 'Modification'\n-513D80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513D84 CENTRAL HEADER #56    02014B50 (33639248)\n-513D88 Created Zip Spec      14 (20) '2.0'\n-513D89 Created OS            00 (0) 'MS-DOS'\n-513D8A Extract Zip Spec      14 (20) '2.0'\n-513D8B Extract OS            00 (0) 'MS-DOS'\n-513D8C General Purpose Flag  0000 (0)\n-513D8E Compression Method    0000 (0) 'Stored'\n-513D90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513D94 CRC                   00000000 (0)\n-513D98 Compressed Size       00000000 (0)\n-513D9C Uncompressed Size     00000000 (0)\n-513DA0 Filename Length       0024 (36)\n-513DA2 Extra Length          0009 (9)\n-513DA4 Comment Length        0000 (0)\n-513DA6 Disk Start            0000 (0)\n-513DA8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513DAA Ext File Attributes   00000000 (0)\n-513DAE Local Header Offset   00029A05 (170501)\n-513DB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513DB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513DD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513DD8   Length              0005 (5)\n-513DDA   Flags               01 (1) 'Modification'\n-513DDB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513DDF CENTRAL HEADER #57    02014B50 (33639248)\n-513DE3 Created Zip Spec      14 (20) '2.0'\n-513DE4 Created OS            00 (0) 'MS-DOS'\n-513DE5 Extract Zip Spec      14 (20) '2.0'\n-513DE6 Extract OS            00 (0) 'MS-DOS'\n-513DE7 General Purpose Flag  0000 (0)\n-513DE9 Compression Method    0000 (0) 'Stored'\n-513DEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513DEF CRC                   00000000 (0)\n-513DF3 Compressed Size       00000000 (0)\n-513DF7 Uncompressed Size     00000000 (0)\n-513DFB Filename Length       002D (45)\n-513DFD Extra Length          0009 (9)\n-513DFF Comment Length        0000 (0)\n-513E01 Disk Start            0000 (0)\n-513E03 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513E05 Ext File Attributes   00000000 (0)\n-513E09 Local Header Offset   00029A50 (170576)\n-513E0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513E0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513E3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513E3C   Length              0005 (5)\n-513E3E   Flags               01 (1) 'Modification'\n-513E3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513E43 CENTRAL HEADER #58    02014B50 (33639248)\n-513E47 Created Zip Spec      14 (20) '2.0'\n-513E48 Created OS            00 (0) 'MS-DOS'\n-513E49 Extract Zip Spec      14 (20) '2.0'\n-513E4A Extract OS            00 (0) 'MS-DOS'\n-513E4B General Purpose Flag  0000 (0)\n-513E4D Compression Method    0000 (0) 'Stored'\n-513E4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513E53 CRC                   00000000 (0)\n-513E57 Compressed Size       00000000 (0)\n-513E5B Uncompressed Size     00000000 (0)\n-513E5F Filename Length       006E (110)\n-513E61 Extra Length          0009 (9)\n-513E63 Comment Length        0000 (0)\n-513E65 Disk Start            0000 (0)\n-513E67 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513E69 Ext File Attributes   00000000 (0)\n-513E6D Local Header Offset   00029AA4 (170660)\n-513E71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513E71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-513EDF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513EE1   Length              0005 (5)\n-513EE3   Flags               01 (1) 'Modification'\n-513EE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513EE8 CENTRAL HEADER #59    02014B50 (33639248)\n-513EEC Created Zip Spec      14 (20) '2.0'\n-513EED Created OS            00 (0) 'MS-DOS'\n-513EEE Extract Zip Spec      14 (20) '2.0'\n-513EEF Extract OS            00 (0) 'MS-DOS'\n-513EF0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-513EF2 Compression Method    0000 (0) 'Stored'\n-513EF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513EF8 CRC                   63D24DDE (1674726878)\n-513EFC Compressed Size       00000E46 (3654)\n-513F00 Uncompressed Size     00000E46 (3654)\n-513F04 Filename Length       0084 (132)\n-513F06 Extra Length          0009 (9)\n-513F08 Comment Length        0000 (0)\n-513F0A Disk Start            0000 (0)\n-513F0C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513F0E Ext File Attributes   00000000 (0)\n-513F12 Local Header Offset   00029B39 (170809)\n-513F16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+513CFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513CFC   Length              0005 (5)\n+513CFE   Flags               01 (1) 'Modification'\n+513CFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513D03 CENTRAL HEADER #56    02014B50 (33639248)\n+513D07 Created Zip Spec      14 (20) '2.0'\n+513D08 Created OS            00 (0) 'MS-DOS'\n+513D09 Extract Zip Spec      14 (20) '2.0'\n+513D0A Extract OS            00 (0) 'MS-DOS'\n+513D0B General Purpose Flag  0000 (0)\n+513D0D Compression Method    0000 (0) 'Stored'\n+513D0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513D13 CRC                   00000000 (0)\n+513D17 Compressed Size       00000000 (0)\n+513D1B Uncompressed Size     00000000 (0)\n+513D1F Filename Length       0024 (36)\n+513D21 Extra Length          0009 (9)\n+513D23 Comment Length        0000 (0)\n+513D25 Disk Start            0000 (0)\n+513D27 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513D29 Ext File Attributes   00000000 (0)\n+513D2D Local Header Offset   0002999C (170396)\n+513D31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513D31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513D55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513D57   Length              0005 (5)\n+513D59   Flags               01 (1) 'Modification'\n+513D5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513D5E CENTRAL HEADER #57    02014B50 (33639248)\n+513D62 Created Zip Spec      14 (20) '2.0'\n+513D63 Created OS            00 (0) 'MS-DOS'\n+513D64 Extract Zip Spec      14 (20) '2.0'\n+513D65 Extract OS            00 (0) 'MS-DOS'\n+513D66 General Purpose Flag  0000 (0)\n+513D68 Compression Method    0000 (0) 'Stored'\n+513D6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513D6E CRC                   00000000 (0)\n+513D72 Compressed Size       00000000 (0)\n+513D76 Uncompressed Size     00000000 (0)\n+513D7A Filename Length       002D (45)\n+513D7C Extra Length          0009 (9)\n+513D7E Comment Length        0000 (0)\n+513D80 Disk Start            0000 (0)\n+513D82 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513D84 Ext File Attributes   00000000 (0)\n+513D88 Local Header Offset   000299E7 (170471)\n+513D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513DB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513DBB   Length              0005 (5)\n+513DBD   Flags               01 (1) 'Modification'\n+513DBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513DC2 CENTRAL HEADER #58    02014B50 (33639248)\n+513DC6 Created Zip Spec      14 (20) '2.0'\n+513DC7 Created OS            00 (0) 'MS-DOS'\n+513DC8 Extract Zip Spec      14 (20) '2.0'\n+513DC9 Extract OS            00 (0) 'MS-DOS'\n+513DCA General Purpose Flag  0000 (0)\n+513DCC Compression Method    0000 (0) 'Stored'\n+513DCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513DD2 CRC                   00000000 (0)\n+513DD6 Compressed Size       00000000 (0)\n+513DDA Uncompressed Size     00000000 (0)\n+513DDE Filename Length       006E (110)\n+513DE0 Extra Length          0009 (9)\n+513DE2 Comment Length        0000 (0)\n+513DE4 Disk Start            0000 (0)\n+513DE6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513DE8 Ext File Attributes   00000000 (0)\n+513DEC Local Header Offset   00029A3B (170555)\n+513DF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513DF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513E5E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513E60   Length              0005 (5)\n+513E62   Flags               01 (1) 'Modification'\n+513E63   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513E67 CENTRAL HEADER #59    02014B50 (33639248)\n+513E6B Created Zip Spec      14 (20) '2.0'\n+513E6C Created OS            00 (0) 'MS-DOS'\n+513E6D Extract Zip Spec      14 (20) '2.0'\n+513E6E Extract OS            00 (0) 'MS-DOS'\n+513E6F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513E71 Compression Method    0000 (0) 'Stored'\n+513E73 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513E77 CRC                   63D24DDE (1674726878)\n+513E7B Compressed Size       00000E46 (3654)\n+513E7F Uncompressed Size     00000E46 (3654)\n+513E83 Filename Length       0084 (132)\n+513E85 Extra Length          0009 (9)\n+513E87 Comment Length        0000 (0)\n+513E89 Disk Start            0000 (0)\n+513E8B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513E8D Ext File Attributes   00000000 (0)\n+513E91 Local Header Offset   00029AD0 (170704)\n+513E95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x513F16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513E95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-513F9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-513F9C   Length              0005 (5)\n-513F9E   Flags               01 (1) 'Modification'\n-513F9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-513FA3 CENTRAL HEADER #60    02014B50 (33639248)\n-513FA7 Created Zip Spec      14 (20) '2.0'\n-513FA8 Created OS            00 (0) 'MS-DOS'\n-513FA9 Extract Zip Spec      14 (20) '2.0'\n-513FAA Extract OS            00 (0) 'MS-DOS'\n-513FAB General Purpose Flag  0000 (0)\n-513FAD Compression Method    0000 (0) 'Stored'\n-513FAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-513FB3 CRC                   00000000 (0)\n-513FB7 Compressed Size       00000000 (0)\n-513FBB Uncompressed Size     00000000 (0)\n-513FBF Filename Length       0075 (117)\n-513FC1 Extra Length          0009 (9)\n-513FC3 Comment Length        0000 (0)\n-513FC5 Disk Start            0000 (0)\n-513FC7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-513FC9 Ext File Attributes   00000000 (0)\n-513FCD Local Header Offset   0002AA3A (174650)\n-513FD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x513FD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514046 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514048   Length              0005 (5)\n-51404A   Flags               01 (1) 'Modification'\n-51404B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51404F CENTRAL HEADER #61    02014B50 (33639248)\n-514053 Created Zip Spec      14 (20) '2.0'\n-514054 Created OS            00 (0) 'MS-DOS'\n-514055 Extract Zip Spec      14 (20) '2.0'\n-514056 Extract OS            00 (0) 'MS-DOS'\n-514057 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514059 Compression Method    0000 (0) 'Stored'\n-51405B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51405F CRC                   2E17013D (773259581)\n-514063 Compressed Size       00000888 (2184)\n-514067 Uncompressed Size     00000888 (2184)\n-51406B Filename Length       008B (139)\n-51406D Extra Length          0009 (9)\n-51406F Comment Length        0000 (0)\n-514071 Disk Start            0000 (0)\n-514073 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514075 Ext File Attributes   00000000 (0)\n-514079 Local Header Offset   0002AAD6 (174806)\n-51407D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+513F19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513F1B   Length              0005 (5)\n+513F1D   Flags               01 (1) 'Modification'\n+513F1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513F22 CENTRAL HEADER #60    02014B50 (33639248)\n+513F26 Created Zip Spec      14 (20) '2.0'\n+513F27 Created OS            00 (0) 'MS-DOS'\n+513F28 Extract Zip Spec      14 (20) '2.0'\n+513F29 Extract OS            00 (0) 'MS-DOS'\n+513F2A General Purpose Flag  0000 (0)\n+513F2C Compression Method    0000 (0) 'Stored'\n+513F2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513F32 CRC                   00000000 (0)\n+513F36 Compressed Size       00000000 (0)\n+513F3A Uncompressed Size     00000000 (0)\n+513F3E Filename Length       0075 (117)\n+513F40 Extra Length          0009 (9)\n+513F42 Comment Length        0000 (0)\n+513F44 Disk Start            0000 (0)\n+513F46 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513F48 Ext File Attributes   00000000 (0)\n+513F4C Local Header Offset   0002A9D1 (174545)\n+513F50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x513F50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+513FC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+513FC7   Length              0005 (5)\n+513FC9   Flags               01 (1) 'Modification'\n+513FCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+513FCE CENTRAL HEADER #61    02014B50 (33639248)\n+513FD2 Created Zip Spec      14 (20) '2.0'\n+513FD3 Created OS            00 (0) 'MS-DOS'\n+513FD4 Extract Zip Spec      14 (20) '2.0'\n+513FD5 Extract OS            00 (0) 'MS-DOS'\n+513FD6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+513FD8 Compression Method    0000 (0) 'Stored'\n+513FDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+513FDE CRC                   2E17013D (773259581)\n+513FE2 Compressed Size       00000888 (2184)\n+513FE6 Uncompressed Size     00000888 (2184)\n+513FEA Filename Length       008B (139)\n+513FEC Extra Length          0009 (9)\n+513FEE Comment Length        0000 (0)\n+513FF0 Disk Start            0000 (0)\n+513FF2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+513FF4 Ext File Attributes   00000000 (0)\n+513FF8 Local Header Offset   0002AA6D (174701)\n+513FFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXX'\n #\n-# WARNING: Offset 0x51407D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513FFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-514108 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51410A   Length              0005 (5)\n-51410C   Flags               01 (1) 'Modification'\n-51410D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514111 CENTRAL HEADER #62    02014B50 (33639248)\n-514115 Created Zip Spec      14 (20) '2.0'\n-514116 Created OS            00 (0) 'MS-DOS'\n-514117 Extract Zip Spec      14 (20) '2.0'\n-514118 Extract OS            00 (0) 'MS-DOS'\n-514119 General Purpose Flag  0000 (0)\n-51411B Compression Method    0000 (0) 'Stored'\n-51411D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514121 CRC                   00000000 (0)\n-514125 Compressed Size       00000000 (0)\n-514129 Uncompressed Size     00000000 (0)\n-51412D Filename Length       0022 (34)\n-51412F Extra Length          0009 (9)\n-514131 Comment Length        0000 (0)\n-514133 Disk Start            0000 (0)\n-514135 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514137 Ext File Attributes   00000000 (0)\n-51413B Local Header Offset   0002B420 (177184)\n-51413F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51413F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514161 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514163   Length              0005 (5)\n-514165   Flags               01 (1) 'Modification'\n-514166   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51416A CENTRAL HEADER #63    02014B50 (33639248)\n-51416E Created Zip Spec      14 (20) '2.0'\n-51416F Created OS            00 (0) 'MS-DOS'\n-514170 Extract Zip Spec      14 (20) '2.0'\n-514171 Extract OS            00 (0) 'MS-DOS'\n-514172 General Purpose Flag  0000 (0)\n-514174 Compression Method    0000 (0) 'Stored'\n-514176 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51417A CRC                   00000000 (0)\n-51417E Compressed Size       00000000 (0)\n-514182 Uncompressed Size     00000000 (0)\n-514186 Filename Length       002B (43)\n-514188 Extra Length          0009 (9)\n-51418A Comment Length        0000 (0)\n-51418C Disk Start            0000 (0)\n-51418E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514190 Ext File Attributes   00000000 (0)\n-514194 Local Header Offset   0002B469 (177257)\n-514198 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514198: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5141C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5141C5   Length              0005 (5)\n-5141C7   Flags               01 (1) 'Modification'\n-5141C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5141CC CENTRAL HEADER #64    02014B50 (33639248)\n-5141D0 Created Zip Spec      14 (20) '2.0'\n-5141D1 Created OS            00 (0) 'MS-DOS'\n-5141D2 Extract Zip Spec      14 (20) '2.0'\n-5141D3 Extract OS            00 (0) 'MS-DOS'\n-5141D4 General Purpose Flag  0000 (0)\n-5141D6 Compression Method    0000 (0) 'Stored'\n-5141D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5141DC CRC                   00000000 (0)\n-5141E0 Compressed Size       00000000 (0)\n-5141E4 Uncompressed Size     00000000 (0)\n-5141E8 Filename Length       0057 (87)\n-5141EA Extra Length          0009 (9)\n-5141EC Comment Length        0000 (0)\n-5141EE Disk Start            0000 (0)\n-5141F0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5141F2 Ext File Attributes   00000000 (0)\n-5141F6 Local Header Offset   0002B4BB (177339)\n-5141FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5141FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514251 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514253   Length              0005 (5)\n-514255   Flags               01 (1) 'Modification'\n-514256   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51425A CENTRAL HEADER #65    02014B50 (33639248)\n-51425E Created Zip Spec      14 (20) '2.0'\n-51425F Created OS            00 (0) 'MS-DOS'\n-514260 Extract Zip Spec      14 (20) '2.0'\n-514261 Extract OS            00 (0) 'MS-DOS'\n-514262 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514264 Compression Method    0000 (0) 'Stored'\n-514266 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51426A CRC                   C1E5A225 (3253051941)\n-51426E Compressed Size       0000070B (1803)\n-514272 Uncompressed Size     0000070B (1803)\n-514276 Filename Length       006D (109)\n-514278 Extra Length          0009 (9)\n-51427A Comment Length        0000 (0)\n-51427C Disk Start            0000 (0)\n-51427E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514280 Ext File Attributes   00000000 (0)\n-514284 Local Header Offset   0002B539 (177465)\n-514288 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514288: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5142F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5142F7   Length              0005 (5)\n-5142F9   Flags               01 (1) 'Modification'\n-5142FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5142FE CENTRAL HEADER #66    02014B50 (33639248)\n-514302 Created Zip Spec      14 (20) '2.0'\n-514303 Created OS            00 (0) 'MS-DOS'\n-514304 Extract Zip Spec      14 (20) '2.0'\n-514305 Extract OS            00 (0) 'MS-DOS'\n-514306 General Purpose Flag  0000 (0)\n-514308 Compression Method    0000 (0) 'Stored'\n-51430A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51430E CRC                   00000000 (0)\n-514312 Compressed Size       00000000 (0)\n-514316 Uncompressed Size     00000000 (0)\n-51431A Filename Length       0056 (86)\n-51431C Extra Length          0009 (9)\n-51431E Comment Length        0000 (0)\n-514320 Disk Start            0000 (0)\n-514322 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514324 Ext File Attributes   00000000 (0)\n-514328 Local Header Offset   0002BCE8 (179432)\n-51432C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51432C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514382 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514384   Length              0005 (5)\n-514386   Flags               01 (1) 'Modification'\n-514387   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51438B CENTRAL HEADER #67    02014B50 (33639248)\n-51438F Created Zip Spec      14 (20) '2.0'\n-514390 Created OS            00 (0) 'MS-DOS'\n-514391 Extract Zip Spec      14 (20) '2.0'\n-514392 Extract OS            00 (0) 'MS-DOS'\n-514393 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514395 Compression Method    0000 (0) 'Stored'\n-514397 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51439B CRC                   8950733E (2303750974)\n-51439F Compressed Size       0000064D (1613)\n-5143A3 Uncompressed Size     0000064D (1613)\n-5143A7 Filename Length       006C (108)\n-5143A9 Extra Length          0009 (9)\n-5143AB Comment Length        0000 (0)\n-5143AD Disk Start            0000 (0)\n-5143AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5143B1 Ext File Attributes   00000000 (0)\n-5143B5 Local Header Offset   0002BD65 (179557)\n-5143B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5143B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514425 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514427   Length              0005 (5)\n-514429   Flags               01 (1) 'Modification'\n-51442A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51442E CENTRAL HEADER #68    02014B50 (33639248)\n-514432 Created Zip Spec      14 (20) '2.0'\n-514433 Created OS            00 (0) 'MS-DOS'\n-514434 Extract Zip Spec      14 (20) '2.0'\n-514435 Extract OS            00 (0) 'MS-DOS'\n-514436 General Purpose Flag  0000 (0)\n-514438 Compression Method    0000 (0) 'Stored'\n-51443A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51443E CRC                   00000000 (0)\n-514442 Compressed Size       00000000 (0)\n-514446 Uncompressed Size     00000000 (0)\n-51444A Filename Length       0055 (85)\n-51444C Extra Length          0009 (9)\n-51444E Comment Length        0000 (0)\n-514450 Disk Start            0000 (0)\n-514452 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514454 Ext File Attributes   00000000 (0)\n-514458 Local Header Offset   0002C455 (181333)\n-51445C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51445C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5144B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5144B3   Length              0005 (5)\n-5144B5   Flags               01 (1) 'Modification'\n-5144B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5144BA CENTRAL HEADER #69    02014B50 (33639248)\n-5144BE Created Zip Spec      14 (20) '2.0'\n-5144BF Created OS            00 (0) 'MS-DOS'\n-5144C0 Extract Zip Spec      14 (20) '2.0'\n-5144C1 Extract OS            00 (0) 'MS-DOS'\n-5144C2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5144C4 Compression Method    0000 (0) 'Stored'\n-5144C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5144CA CRC                   A0157ABE (2685762238)\n-5144CE Compressed Size       00000643 (1603)\n-5144D2 Uncompressed Size     00000643 (1603)\n-5144D6 Filename Length       006B (107)\n-5144D8 Extra Length          0009 (9)\n-5144DA Comment Length        0000 (0)\n-5144DC Disk Start            0000 (0)\n-5144DE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5144E0 Ext File Attributes   00000000 (0)\n-5144E4 Local Header Offset   0002C4D1 (181457)\n-5144E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5144E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514553 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514555   Length              0005 (5)\n-514557   Flags               01 (1) 'Modification'\n-514558   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51455C CENTRAL HEADER #70    02014B50 (33639248)\n-514560 Created Zip Spec      14 (20) '2.0'\n-514561 Created OS            00 (0) 'MS-DOS'\n-514562 Extract Zip Spec      14 (20) '2.0'\n-514563 Extract OS            00 (0) 'MS-DOS'\n-514564 General Purpose Flag  0000 (0)\n-514566 Compression Method    0000 (0) 'Stored'\n-514568 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51456C CRC                   00000000 (0)\n-514570 Compressed Size       00000000 (0)\n-514574 Uncompressed Size     00000000 (0)\n-514578 Filename Length       002B (43)\n-51457A Extra Length          0009 (9)\n-51457C Comment Length        0000 (0)\n-51457E Disk Start            0000 (0)\n-514580 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514582 Ext File Attributes   00000000 (0)\n-514586 Local Header Offset   0002CBB6 (183222)\n-51458A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51458A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5145B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5145B7   Length              0005 (5)\n-5145B9   Flags               01 (1) 'Modification'\n-5145BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5145BE CENTRAL HEADER #71    02014B50 (33639248)\n-5145C2 Created Zip Spec      14 (20) '2.0'\n-5145C3 Created OS            00 (0) 'MS-DOS'\n-5145C4 Extract Zip Spec      14 (20) '2.0'\n-5145C5 Extract OS            00 (0) 'MS-DOS'\n-5145C6 General Purpose Flag  0000 (0)\n-5145C8 Compression Method    0000 (0) 'Stored'\n-5145CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5145CE CRC                   00000000 (0)\n-5145D2 Compressed Size       00000000 (0)\n-5145D6 Uncompressed Size     00000000 (0)\n-5145DA Filename Length       0034 (52)\n-5145DC Extra Length          0009 (9)\n-5145DE Comment Length        0000 (0)\n-5145E0 Disk Start            0000 (0)\n-5145E2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5145E4 Ext File Attributes   00000000 (0)\n-5145E8 Local Header Offset   0002CC08 (183304)\n-5145EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5145EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514620 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514622   Length              0005 (5)\n-514624   Flags               01 (1) 'Modification'\n-514625   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514629 CENTRAL HEADER #72    02014B50 (33639248)\n-51462D Created Zip Spec      14 (20) '2.0'\n-51462E Created OS            00 (0) 'MS-DOS'\n-51462F Extract Zip Spec      14 (20) '2.0'\n-514630 Extract OS            00 (0) 'MS-DOS'\n-514631 General Purpose Flag  0000 (0)\n-514633 Compression Method    0000 (0) 'Stored'\n-514635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514639 CRC                   00000000 (0)\n-51463D Compressed Size       00000000 (0)\n-514641 Uncompressed Size     00000000 (0)\n-514645 Filename Length       007B (123)\n-514647 Extra Length          0009 (9)\n-514649 Comment Length        0000 (0)\n-51464B Disk Start            0000 (0)\n-51464D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51464F Ext File Attributes   00000000 (0)\n-514653 Local Header Offset   0002CC63 (183395)\n-514657 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514657: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5146D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5146D4   Length              0005 (5)\n-5146D6   Flags               01 (1) 'Modification'\n-5146D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5146DB CENTRAL HEADER #73    02014B50 (33639248)\n-5146DF Created Zip Spec      14 (20) '2.0'\n-5146E0 Created OS            00 (0) 'MS-DOS'\n-5146E1 Extract Zip Spec      14 (20) '2.0'\n-5146E2 Extract OS            00 (0) 'MS-DOS'\n-5146E3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5146E5 Compression Method    0000 (0) 'Stored'\n-5146E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5146EB CRC                   164EC61D (374261277)\n-5146EF Compressed Size       00000B15 (2837)\n-5146F3 Uncompressed Size     00000B15 (2837)\n-5146F7 Filename Length       0091 (145)\n-5146F9 Extra Length          0009 (9)\n-5146FB Comment Length        0000 (0)\n-5146FD Disk Start            0000 (0)\n-5146FF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514701 Ext File Attributes   00000000 (0)\n-514705 Local Header Offset   0002CD05 (183557)\n-514709 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+514087 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514089   Length              0005 (5)\n+51408B   Flags               01 (1) 'Modification'\n+51408C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514090 CENTRAL HEADER #62    02014B50 (33639248)\n+514094 Created Zip Spec      14 (20) '2.0'\n+514095 Created OS            00 (0) 'MS-DOS'\n+514096 Extract Zip Spec      14 (20) '2.0'\n+514097 Extract OS            00 (0) 'MS-DOS'\n+514098 General Purpose Flag  0000 (0)\n+51409A Compression Method    0000 (0) 'Stored'\n+51409C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5140A0 CRC                   00000000 (0)\n+5140A4 Compressed Size       00000000 (0)\n+5140A8 Uncompressed Size     00000000 (0)\n+5140AC Filename Length       0022 (34)\n+5140AE Extra Length          0009 (9)\n+5140B0 Comment Length        0000 (0)\n+5140B2 Disk Start            0000 (0)\n+5140B4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5140B6 Ext File Attributes   00000000 (0)\n+5140BA Local Header Offset   0002B3B7 (177079)\n+5140BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5140BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5140E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5140E2   Length              0005 (5)\n+5140E4   Flags               01 (1) 'Modification'\n+5140E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5140E9 CENTRAL HEADER #63    02014B50 (33639248)\n+5140ED Created Zip Spec      14 (20) '2.0'\n+5140EE Created OS            00 (0) 'MS-DOS'\n+5140EF Extract Zip Spec      14 (20) '2.0'\n+5140F0 Extract OS            00 (0) 'MS-DOS'\n+5140F1 General Purpose Flag  0000 (0)\n+5140F3 Compression Method    0000 (0) 'Stored'\n+5140F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5140F9 CRC                   00000000 (0)\n+5140FD Compressed Size       00000000 (0)\n+514101 Uncompressed Size     00000000 (0)\n+514105 Filename Length       002B (43)\n+514107 Extra Length          0009 (9)\n+514109 Comment Length        0000 (0)\n+51410B Disk Start            0000 (0)\n+51410D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51410F Ext File Attributes   00000000 (0)\n+514113 Local Header Offset   0002B400 (177152)\n+514117 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514117: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514142 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514144   Length              0005 (5)\n+514146   Flags               01 (1) 'Modification'\n+514147   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51414B CENTRAL HEADER #64    02014B50 (33639248)\n+51414F Created Zip Spec      14 (20) '2.0'\n+514150 Created OS            00 (0) 'MS-DOS'\n+514151 Extract Zip Spec      14 (20) '2.0'\n+514152 Extract OS            00 (0) 'MS-DOS'\n+514153 General Purpose Flag  0000 (0)\n+514155 Compression Method    0000 (0) 'Stored'\n+514157 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51415B CRC                   00000000 (0)\n+51415F Compressed Size       00000000 (0)\n+514163 Uncompressed Size     00000000 (0)\n+514167 Filename Length       0057 (87)\n+514169 Extra Length          0009 (9)\n+51416B Comment Length        0000 (0)\n+51416D Disk Start            0000 (0)\n+51416F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514171 Ext File Attributes   00000000 (0)\n+514175 Local Header Offset   0002B452 (177234)\n+514179 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514179: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5141D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5141D2   Length              0005 (5)\n+5141D4   Flags               01 (1) 'Modification'\n+5141D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5141D9 CENTRAL HEADER #65    02014B50 (33639248)\n+5141DD Created Zip Spec      14 (20) '2.0'\n+5141DE Created OS            00 (0) 'MS-DOS'\n+5141DF Extract Zip Spec      14 (20) '2.0'\n+5141E0 Extract OS            00 (0) 'MS-DOS'\n+5141E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5141E3 Compression Method    0000 (0) 'Stored'\n+5141E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5141E9 CRC                   C1E5A225 (3253051941)\n+5141ED Compressed Size       0000070B (1803)\n+5141F1 Uncompressed Size     0000070B (1803)\n+5141F5 Filename Length       006D (109)\n+5141F7 Extra Length          0009 (9)\n+5141F9 Comment Length        0000 (0)\n+5141FB Disk Start            0000 (0)\n+5141FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5141FF Ext File Attributes   00000000 (0)\n+514203 Local Header Offset   0002B4D0 (177360)\n+514207 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514207: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514274 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514276   Length              0005 (5)\n+514278   Flags               01 (1) 'Modification'\n+514279   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51427D CENTRAL HEADER #66    02014B50 (33639248)\n+514281 Created Zip Spec      14 (20) '2.0'\n+514282 Created OS            00 (0) 'MS-DOS'\n+514283 Extract Zip Spec      14 (20) '2.0'\n+514284 Extract OS            00 (0) 'MS-DOS'\n+514285 General Purpose Flag  0000 (0)\n+514287 Compression Method    0000 (0) 'Stored'\n+514289 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51428D CRC                   00000000 (0)\n+514291 Compressed Size       00000000 (0)\n+514295 Uncompressed Size     00000000 (0)\n+514299 Filename Length       0056 (86)\n+51429B Extra Length          0009 (9)\n+51429D Comment Length        0000 (0)\n+51429F Disk Start            0000 (0)\n+5142A1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5142A3 Ext File Attributes   00000000 (0)\n+5142A7 Local Header Offset   0002BC7F (179327)\n+5142AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5142AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514301 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514303   Length              0005 (5)\n+514305   Flags               01 (1) 'Modification'\n+514306   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51430A CENTRAL HEADER #67    02014B50 (33639248)\n+51430E Created Zip Spec      14 (20) '2.0'\n+51430F Created OS            00 (0) 'MS-DOS'\n+514310 Extract Zip Spec      14 (20) '2.0'\n+514311 Extract OS            00 (0) 'MS-DOS'\n+514312 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514314 Compression Method    0000 (0) 'Stored'\n+514316 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51431A CRC                   8950733E (2303750974)\n+51431E Compressed Size       0000064D (1613)\n+514322 Uncompressed Size     0000064D (1613)\n+514326 Filename Length       006C (108)\n+514328 Extra Length          0009 (9)\n+51432A Comment Length        0000 (0)\n+51432C Disk Start            0000 (0)\n+51432E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514330 Ext File Attributes   00000000 (0)\n+514334 Local Header Offset   0002BCFC (179452)\n+514338 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514338: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5143A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5143A6   Length              0005 (5)\n+5143A8   Flags               01 (1) 'Modification'\n+5143A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5143AD CENTRAL HEADER #68    02014B50 (33639248)\n+5143B1 Created Zip Spec      14 (20) '2.0'\n+5143B2 Created OS            00 (0) 'MS-DOS'\n+5143B3 Extract Zip Spec      14 (20) '2.0'\n+5143B4 Extract OS            00 (0) 'MS-DOS'\n+5143B5 General Purpose Flag  0000 (0)\n+5143B7 Compression Method    0000 (0) 'Stored'\n+5143B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5143BD CRC                   00000000 (0)\n+5143C1 Compressed Size       00000000 (0)\n+5143C5 Uncompressed Size     00000000 (0)\n+5143C9 Filename Length       0055 (85)\n+5143CB Extra Length          0009 (9)\n+5143CD Comment Length        0000 (0)\n+5143CF Disk Start            0000 (0)\n+5143D1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5143D3 Ext File Attributes   00000000 (0)\n+5143D7 Local Header Offset   0002C3EC (181228)\n+5143DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5143DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514430 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514432   Length              0005 (5)\n+514434   Flags               01 (1) 'Modification'\n+514435   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514439 CENTRAL HEADER #69    02014B50 (33639248)\n+51443D Created Zip Spec      14 (20) '2.0'\n+51443E Created OS            00 (0) 'MS-DOS'\n+51443F Extract Zip Spec      14 (20) '2.0'\n+514440 Extract OS            00 (0) 'MS-DOS'\n+514441 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514443 Compression Method    0000 (0) 'Stored'\n+514445 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514449 CRC                   A0157ABE (2685762238)\n+51444D Compressed Size       00000643 (1603)\n+514451 Uncompressed Size     00000643 (1603)\n+514455 Filename Length       006B (107)\n+514457 Extra Length          0009 (9)\n+514459 Comment Length        0000 (0)\n+51445B Disk Start            0000 (0)\n+51445D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51445F Ext File Attributes   00000000 (0)\n+514463 Local Header Offset   0002C468 (181352)\n+514467 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514467: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5144D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5144D4   Length              0005 (5)\n+5144D6   Flags               01 (1) 'Modification'\n+5144D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5144DB CENTRAL HEADER #70    02014B50 (33639248)\n+5144DF Created Zip Spec      14 (20) '2.0'\n+5144E0 Created OS            00 (0) 'MS-DOS'\n+5144E1 Extract Zip Spec      14 (20) '2.0'\n+5144E2 Extract OS            00 (0) 'MS-DOS'\n+5144E3 General Purpose Flag  0000 (0)\n+5144E5 Compression Method    0000 (0) 'Stored'\n+5144E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5144EB CRC                   00000000 (0)\n+5144EF Compressed Size       00000000 (0)\n+5144F3 Uncompressed Size     00000000 (0)\n+5144F7 Filename Length       002B (43)\n+5144F9 Extra Length          0009 (9)\n+5144FB Comment Length        0000 (0)\n+5144FD Disk Start            0000 (0)\n+5144FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514501 Ext File Attributes   00000000 (0)\n+514505 Local Header Offset   0002CB4D (183117)\n+514509 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514509: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514534 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514536   Length              0005 (5)\n+514538   Flags               01 (1) 'Modification'\n+514539   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51453D CENTRAL HEADER #71    02014B50 (33639248)\n+514541 Created Zip Spec      14 (20) '2.0'\n+514542 Created OS            00 (0) 'MS-DOS'\n+514543 Extract Zip Spec      14 (20) '2.0'\n+514544 Extract OS            00 (0) 'MS-DOS'\n+514545 General Purpose Flag  0000 (0)\n+514547 Compression Method    0000 (0) 'Stored'\n+514549 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51454D CRC                   00000000 (0)\n+514551 Compressed Size       00000000 (0)\n+514555 Uncompressed Size     00000000 (0)\n+514559 Filename Length       0034 (52)\n+51455B Extra Length          0009 (9)\n+51455D Comment Length        0000 (0)\n+51455F Disk Start            0000 (0)\n+514561 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514563 Ext File Attributes   00000000 (0)\n+514567 Local Header Offset   0002CB9F (183199)\n+51456B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51456B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51459F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5145A1   Length              0005 (5)\n+5145A3   Flags               01 (1) 'Modification'\n+5145A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5145A8 CENTRAL HEADER #72    02014B50 (33639248)\n+5145AC Created Zip Spec      14 (20) '2.0'\n+5145AD Created OS            00 (0) 'MS-DOS'\n+5145AE Extract Zip Spec      14 (20) '2.0'\n+5145AF Extract OS            00 (0) 'MS-DOS'\n+5145B0 General Purpose Flag  0000 (0)\n+5145B2 Compression Method    0000 (0) 'Stored'\n+5145B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5145B8 CRC                   00000000 (0)\n+5145BC Compressed Size       00000000 (0)\n+5145C0 Uncompressed Size     00000000 (0)\n+5145C4 Filename Length       007B (123)\n+5145C6 Extra Length          0009 (9)\n+5145C8 Comment Length        0000 (0)\n+5145CA Disk Start            0000 (0)\n+5145CC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5145CE Ext File Attributes   00000000 (0)\n+5145D2 Local Header Offset   0002CBFA (183290)\n+5145D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5145D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514651 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514653   Length              0005 (5)\n+514655   Flags               01 (1) 'Modification'\n+514656   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51465A CENTRAL HEADER #73    02014B50 (33639248)\n+51465E Created Zip Spec      14 (20) '2.0'\n+51465F Created OS            00 (0) 'MS-DOS'\n+514660 Extract Zip Spec      14 (20) '2.0'\n+514661 Extract OS            00 (0) 'MS-DOS'\n+514662 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514664 Compression Method    0000 (0) 'Stored'\n+514666 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51466A CRC                   164EC61D (374261277)\n+51466E Compressed Size       00000B15 (2837)\n+514672 Uncompressed Size     00000B15 (2837)\n+514676 Filename Length       0091 (145)\n+514678 Extra Length          0009 (9)\n+51467A Comment Length        0000 (0)\n+51467C Disk Start            0000 (0)\n+51467E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514680 Ext File Attributes   00000000 (0)\n+514684 Local Header Offset   0002CC9C (183452)\n+514688 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x514709: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x514688: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51479A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51479C   Length              0005 (5)\n-51479E   Flags               01 (1) 'Modification'\n-51479F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5147A3 CENTRAL HEADER #74    02014B50 (33639248)\n-5147A7 Created Zip Spec      14 (20) '2.0'\n-5147A8 Created OS            00 (0) 'MS-DOS'\n-5147A9 Extract Zip Spec      14 (20) '2.0'\n-5147AA Extract OS            00 (0) 'MS-DOS'\n-5147AB General Purpose Flag  0000 (0)\n-5147AD Compression Method    0000 (0) 'Stored'\n-5147AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5147B3 CRC                   00000000 (0)\n-5147B7 Compressed Size       00000000 (0)\n-5147BB Uncompressed Size     00000000 (0)\n-5147BF Filename Length       0025 (37)\n-5147C1 Extra Length          0009 (9)\n-5147C3 Comment Length        0000 (0)\n-5147C5 Disk Start            0000 (0)\n-5147C7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5147C9 Ext File Attributes   00000000 (0)\n-5147CD Local Header Offset   0002D8E2 (186594)\n-5147D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5147D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5147F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5147F8   Length              0005 (5)\n-5147FA   Flags               01 (1) 'Modification'\n-5147FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5147FF CENTRAL HEADER #75    02014B50 (33639248)\n-514803 Created Zip Spec      14 (20) '2.0'\n-514804 Created OS            00 (0) 'MS-DOS'\n-514805 Extract Zip Spec      14 (20) '2.0'\n-514806 Extract OS            00 (0) 'MS-DOS'\n-514807 General Purpose Flag  0000 (0)\n-514809 Compression Method    0000 (0) 'Stored'\n-51480B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51480F CRC                   00000000 (0)\n-514813 Compressed Size       00000000 (0)\n-514817 Uncompressed Size     00000000 (0)\n-51481B Filename Length       002E (46)\n-51481D Extra Length          0009 (9)\n-51481F Comment Length        0000 (0)\n-514821 Disk Start            0000 (0)\n-514823 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514825 Ext File Attributes   00000000 (0)\n-514829 Local Header Offset   0002D92E (186670)\n-51482D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51482D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51485B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51485D   Length              0005 (5)\n-51485F   Flags               01 (1) 'Modification'\n-514860   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514864 CENTRAL HEADER #76    02014B50 (33639248)\n-514868 Created Zip Spec      14 (20) '2.0'\n-514869 Created OS            00 (0) 'MS-DOS'\n-51486A Extract Zip Spec      14 (20) '2.0'\n-51486B Extract OS            00 (0) 'MS-DOS'\n-51486C General Purpose Flag  0000 (0)\n-51486E Compression Method    0000 (0) 'Stored'\n-514870 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514874 CRC                   00000000 (0)\n-514878 Compressed Size       00000000 (0)\n-51487C Uncompressed Size     00000000 (0)\n-514880 Filename Length       005F (95)\n-514882 Extra Length          0009 (9)\n-514884 Comment Length        0000 (0)\n-514886 Disk Start            0000 (0)\n-514888 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51488A Ext File Attributes   00000000 (0)\n-51488E Local Header Offset   0002D983 (186755)\n-514892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5148F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5148F3   Length              0005 (5)\n-5148F5   Flags               01 (1) 'Modification'\n-5148F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5148FA CENTRAL HEADER #77    02014B50 (33639248)\n-5148FE Created Zip Spec      14 (20) '2.0'\n-5148FF Created OS            00 (0) 'MS-DOS'\n-514900 Extract Zip Spec      14 (20) '2.0'\n-514901 Extract OS            00 (0) 'MS-DOS'\n-514902 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514904 Compression Method    0000 (0) 'Stored'\n-514906 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51490A CRC                   4F9A1C4F (1335499855)\n-51490E Compressed Size       000009AF (2479)\n-514912 Uncompressed Size     000009AF (2479)\n-514916 Filename Length       0075 (117)\n-514918 Extra Length          0009 (9)\n-51491A Comment Length        0000 (0)\n-51491C Disk Start            0000 (0)\n-51491E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514920 Ext File Attributes   00000000 (0)\n-514924 Local Header Offset   0002DA09 (186889)\n-514928 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514928: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51499D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51499F   Length              0005 (5)\n-5149A1   Flags               01 (1) 'Modification'\n-5149A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5149A6 CENTRAL HEADER #78    02014B50 (33639248)\n-5149AA Created Zip Spec      14 (20) '2.0'\n-5149AB Created OS            00 (0) 'MS-DOS'\n-5149AC Extract Zip Spec      14 (20) '2.0'\n-5149AD Extract OS            00 (0) 'MS-DOS'\n-5149AE General Purpose Flag  0000 (0)\n-5149B0 Compression Method    0000 (0) 'Stored'\n-5149B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5149B6 CRC                   00000000 (0)\n-5149BA Compressed Size       00000000 (0)\n-5149BE Uncompressed Size     00000000 (0)\n-5149C2 Filename Length       006C (108)\n-5149C4 Extra Length          0009 (9)\n-5149C6 Comment Length        0000 (0)\n-5149C8 Disk Start            0000 (0)\n-5149CA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5149CC Ext File Attributes   00000000 (0)\n-5149D0 Local Header Offset   0002E464 (189540)\n-5149D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5149D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514A40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514A42   Length              0005 (5)\n-514A44   Flags               01 (1) 'Modification'\n-514A45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514A49 CENTRAL HEADER #79    02014B50 (33639248)\n-514A4D Created Zip Spec      14 (20) '2.0'\n-514A4E Created OS            00 (0) 'MS-DOS'\n-514A4F Extract Zip Spec      14 (20) '2.0'\n-514A50 Extract OS            00 (0) 'MS-DOS'\n-514A51 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514A53 Compression Method    0000 (0) 'Stored'\n-514A55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514A59 CRC                   754F4527 (1968129319)\n-514A5D Compressed Size       00001265 (4709)\n-514A61 Uncompressed Size     00001265 (4709)\n-514A65 Filename Length       0082 (130)\n-514A67 Extra Length          0009 (9)\n-514A69 Comment Length        0000 (0)\n-514A6B Disk Start            0000 (0)\n-514A6D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514A6F Ext File Attributes   00000000 (0)\n-514A73 Local Header Offset   0002E4F7 (189687)\n-514A77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514A77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514AF9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514AFB   Length              0005 (5)\n-514AFD   Flags               01 (1) 'Modification'\n-514AFE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514B02 CENTRAL HEADER #80    02014B50 (33639248)\n-514B06 Created Zip Spec      14 (20) '2.0'\n-514B07 Created OS            00 (0) 'MS-DOS'\n-514B08 Extract Zip Spec      14 (20) '2.0'\n-514B09 Extract OS            00 (0) 'MS-DOS'\n-514B0A General Purpose Flag  0000 (0)\n-514B0C Compression Method    0000 (0) 'Stored'\n-514B0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514B12 CRC                   00000000 (0)\n-514B16 Compressed Size       00000000 (0)\n-514B1A Uncompressed Size     00000000 (0)\n-514B1E Filename Length       002F (47)\n-514B20 Extra Length          0009 (9)\n-514B22 Comment Length        0000 (0)\n-514B24 Disk Start            0000 (0)\n-514B26 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514B28 Ext File Attributes   00000000 (0)\n-514B2C Local Header Offset   0002F815 (194581)\n-514B30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514B30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514B5F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514B61   Length              0005 (5)\n-514B63   Flags               01 (1) 'Modification'\n-514B64   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514B68 CENTRAL HEADER #81    02014B50 (33639248)\n-514B6C Created Zip Spec      14 (20) '2.0'\n-514B6D Created OS            00 (0) 'MS-DOS'\n-514B6E Extract Zip Spec      14 (20) '2.0'\n-514B6F Extract OS            00 (0) 'MS-DOS'\n-514B70 General Purpose Flag  0000 (0)\n-514B72 Compression Method    0000 (0) 'Stored'\n-514B74 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514B78 CRC                   00000000 (0)\n-514B7C Compressed Size       00000000 (0)\n-514B80 Uncompressed Size     00000000 (0)\n-514B84 Filename Length       0038 (56)\n-514B86 Extra Length          0009 (9)\n-514B88 Comment Length        0000 (0)\n-514B8A Disk Start            0000 (0)\n-514B8C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514B8E Ext File Attributes   00000000 (0)\n-514B92 Local Header Offset   0002F86B (194667)\n-514B96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514B96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514BCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514BD0   Length              0005 (5)\n-514BD2   Flags               01 (1) 'Modification'\n-514BD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514BD7 CENTRAL HEADER #82    02014B50 (33639248)\n-514BDB Created Zip Spec      14 (20) '2.0'\n-514BDC Created OS            00 (0) 'MS-DOS'\n-514BDD Extract Zip Spec      14 (20) '2.0'\n-514BDE Extract OS            00 (0) 'MS-DOS'\n-514BDF General Purpose Flag  0000 (0)\n-514BE1 Compression Method    0000 (0) 'Stored'\n-514BE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514BE7 CRC                   00000000 (0)\n-514BEB Compressed Size       00000000 (0)\n-514BEF Uncompressed Size     00000000 (0)\n-514BF3 Filename Length       007A (122)\n-514BF5 Extra Length          0009 (9)\n-514BF7 Comment Length        0000 (0)\n-514BF9 Disk Start            0000 (0)\n-514BFB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514BFD Ext File Attributes   00000000 (0)\n-514C01 Local Header Offset   0002F8CA (194762)\n-514C05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514C05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514C7F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514C81   Length              0005 (5)\n-514C83   Flags               01 (1) 'Modification'\n-514C84   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514C88 CENTRAL HEADER #83    02014B50 (33639248)\n-514C8C Created Zip Spec      14 (20) '2.0'\n-514C8D Created OS            00 (0) 'MS-DOS'\n-514C8E Extract Zip Spec      14 (20) '2.0'\n-514C8F Extract OS            00 (0) 'MS-DOS'\n-514C90 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514C92 Compression Method    0000 (0) 'Stored'\n-514C94 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514C98 CRC                   896578EC (2305128684)\n-514C9C Compressed Size       00001327 (4903)\n-514CA0 Uncompressed Size     00001327 (4903)\n-514CA4 Filename Length       0090 (144)\n-514CA6 Extra Length          0009 (9)\n-514CA8 Comment Length        0000 (0)\n-514CAA Disk Start            0000 (0)\n-514CAC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514CAE Ext File Attributes   00000000 (0)\n-514CB2 Local Header Offset   0002F96B (194923)\n-514CB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+514719 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51471B   Length              0005 (5)\n+51471D   Flags               01 (1) 'Modification'\n+51471E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514722 CENTRAL HEADER #74    02014B50 (33639248)\n+514726 Created Zip Spec      14 (20) '2.0'\n+514727 Created OS            00 (0) 'MS-DOS'\n+514728 Extract Zip Spec      14 (20) '2.0'\n+514729 Extract OS            00 (0) 'MS-DOS'\n+51472A General Purpose Flag  0000 (0)\n+51472C Compression Method    0000 (0) 'Stored'\n+51472E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514732 CRC                   00000000 (0)\n+514736 Compressed Size       00000000 (0)\n+51473A Uncompressed Size     00000000 (0)\n+51473E Filename Length       0025 (37)\n+514740 Extra Length          0009 (9)\n+514742 Comment Length        0000 (0)\n+514744 Disk Start            0000 (0)\n+514746 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514748 Ext File Attributes   00000000 (0)\n+51474C Local Header Offset   0002D879 (186489)\n+514750 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514750: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514775 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514777   Length              0005 (5)\n+514779   Flags               01 (1) 'Modification'\n+51477A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51477E CENTRAL HEADER #75    02014B50 (33639248)\n+514782 Created Zip Spec      14 (20) '2.0'\n+514783 Created OS            00 (0) 'MS-DOS'\n+514784 Extract Zip Spec      14 (20) '2.0'\n+514785 Extract OS            00 (0) 'MS-DOS'\n+514786 General Purpose Flag  0000 (0)\n+514788 Compression Method    0000 (0) 'Stored'\n+51478A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51478E CRC                   00000000 (0)\n+514792 Compressed Size       00000000 (0)\n+514796 Uncompressed Size     00000000 (0)\n+51479A Filename Length       002E (46)\n+51479C Extra Length          0009 (9)\n+51479E Comment Length        0000 (0)\n+5147A0 Disk Start            0000 (0)\n+5147A2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5147A4 Ext File Attributes   00000000 (0)\n+5147A8 Local Header Offset   0002D8C5 (186565)\n+5147AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5147AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5147DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5147DC   Length              0005 (5)\n+5147DE   Flags               01 (1) 'Modification'\n+5147DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5147E3 CENTRAL HEADER #76    02014B50 (33639248)\n+5147E7 Created Zip Spec      14 (20) '2.0'\n+5147E8 Created OS            00 (0) 'MS-DOS'\n+5147E9 Extract Zip Spec      14 (20) '2.0'\n+5147EA Extract OS            00 (0) 'MS-DOS'\n+5147EB General Purpose Flag  0000 (0)\n+5147ED Compression Method    0000 (0) 'Stored'\n+5147EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5147F3 CRC                   00000000 (0)\n+5147F7 Compressed Size       00000000 (0)\n+5147FB Uncompressed Size     00000000 (0)\n+5147FF Filename Length       005F (95)\n+514801 Extra Length          0009 (9)\n+514803 Comment Length        0000 (0)\n+514805 Disk Start            0000 (0)\n+514807 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514809 Ext File Attributes   00000000 (0)\n+51480D Local Header Offset   0002D91A (186650)\n+514811 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514811: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514870 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514872   Length              0005 (5)\n+514874   Flags               01 (1) 'Modification'\n+514875   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514879 CENTRAL HEADER #77    02014B50 (33639248)\n+51487D Created Zip Spec      14 (20) '2.0'\n+51487E Created OS            00 (0) 'MS-DOS'\n+51487F Extract Zip Spec      14 (20) '2.0'\n+514880 Extract OS            00 (0) 'MS-DOS'\n+514881 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514883 Compression Method    0000 (0) 'Stored'\n+514885 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514889 CRC                   4F9A1C4F (1335499855)\n+51488D Compressed Size       000009AF (2479)\n+514891 Uncompressed Size     000009AF (2479)\n+514895 Filename Length       0075 (117)\n+514897 Extra Length          0009 (9)\n+514899 Comment Length        0000 (0)\n+51489B Disk Start            0000 (0)\n+51489D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51489F Ext File Attributes   00000000 (0)\n+5148A3 Local Header Offset   0002D9A0 (186784)\n+5148A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5148A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51491C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51491E   Length              0005 (5)\n+514920   Flags               01 (1) 'Modification'\n+514921   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514925 CENTRAL HEADER #78    02014B50 (33639248)\n+514929 Created Zip Spec      14 (20) '2.0'\n+51492A Created OS            00 (0) 'MS-DOS'\n+51492B Extract Zip Spec      14 (20) '2.0'\n+51492C Extract OS            00 (0) 'MS-DOS'\n+51492D General Purpose Flag  0000 (0)\n+51492F Compression Method    0000 (0) 'Stored'\n+514931 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514935 CRC                   00000000 (0)\n+514939 Compressed Size       00000000 (0)\n+51493D Uncompressed Size     00000000 (0)\n+514941 Filename Length       006C (108)\n+514943 Extra Length          0009 (9)\n+514945 Comment Length        0000 (0)\n+514947 Disk Start            0000 (0)\n+514949 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51494B Ext File Attributes   00000000 (0)\n+51494F Local Header Offset   0002E3FB (189435)\n+514953 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514953: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5149BF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5149C1   Length              0005 (5)\n+5149C3   Flags               01 (1) 'Modification'\n+5149C4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5149C8 CENTRAL HEADER #79    02014B50 (33639248)\n+5149CC Created Zip Spec      14 (20) '2.0'\n+5149CD Created OS            00 (0) 'MS-DOS'\n+5149CE Extract Zip Spec      14 (20) '2.0'\n+5149CF Extract OS            00 (0) 'MS-DOS'\n+5149D0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5149D2 Compression Method    0000 (0) 'Stored'\n+5149D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5149D8 CRC                   754F4527 (1968129319)\n+5149DC Compressed Size       00001265 (4709)\n+5149E0 Uncompressed Size     00001265 (4709)\n+5149E4 Filename Length       0082 (130)\n+5149E6 Extra Length          0009 (9)\n+5149E8 Comment Length        0000 (0)\n+5149EA Disk Start            0000 (0)\n+5149EC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5149EE Ext File Attributes   00000000 (0)\n+5149F2 Local Header Offset   0002E48E (189582)\n+5149F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5149F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514A78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514A7A   Length              0005 (5)\n+514A7C   Flags               01 (1) 'Modification'\n+514A7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514A81 CENTRAL HEADER #80    02014B50 (33639248)\n+514A85 Created Zip Spec      14 (20) '2.0'\n+514A86 Created OS            00 (0) 'MS-DOS'\n+514A87 Extract Zip Spec      14 (20) '2.0'\n+514A88 Extract OS            00 (0) 'MS-DOS'\n+514A89 General Purpose Flag  0000 (0)\n+514A8B Compression Method    0000 (0) 'Stored'\n+514A8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514A91 CRC                   00000000 (0)\n+514A95 Compressed Size       00000000 (0)\n+514A99 Uncompressed Size     00000000 (0)\n+514A9D Filename Length       002F (47)\n+514A9F Extra Length          0009 (9)\n+514AA1 Comment Length        0000 (0)\n+514AA3 Disk Start            0000 (0)\n+514AA5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514AA7 Ext File Attributes   00000000 (0)\n+514AAB Local Header Offset   0002F7AC (194476)\n+514AAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514AAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514ADE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514AE0   Length              0005 (5)\n+514AE2   Flags               01 (1) 'Modification'\n+514AE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514AE7 CENTRAL HEADER #81    02014B50 (33639248)\n+514AEB Created Zip Spec      14 (20) '2.0'\n+514AEC Created OS            00 (0) 'MS-DOS'\n+514AED Extract Zip Spec      14 (20) '2.0'\n+514AEE Extract OS            00 (0) 'MS-DOS'\n+514AEF General Purpose Flag  0000 (0)\n+514AF1 Compression Method    0000 (0) 'Stored'\n+514AF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514AF7 CRC                   00000000 (0)\n+514AFB Compressed Size       00000000 (0)\n+514AFF Uncompressed Size     00000000 (0)\n+514B03 Filename Length       0038 (56)\n+514B05 Extra Length          0009 (9)\n+514B07 Comment Length        0000 (0)\n+514B09 Disk Start            0000 (0)\n+514B0B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514B0D Ext File Attributes   00000000 (0)\n+514B11 Local Header Offset   0002F802 (194562)\n+514B15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514B15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514B4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514B4F   Length              0005 (5)\n+514B51   Flags               01 (1) 'Modification'\n+514B52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514B56 CENTRAL HEADER #82    02014B50 (33639248)\n+514B5A Created Zip Spec      14 (20) '2.0'\n+514B5B Created OS            00 (0) 'MS-DOS'\n+514B5C Extract Zip Spec      14 (20) '2.0'\n+514B5D Extract OS            00 (0) 'MS-DOS'\n+514B5E General Purpose Flag  0000 (0)\n+514B60 Compression Method    0000 (0) 'Stored'\n+514B62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514B66 CRC                   00000000 (0)\n+514B6A Compressed Size       00000000 (0)\n+514B6E Uncompressed Size     00000000 (0)\n+514B72 Filename Length       007A (122)\n+514B74 Extra Length          0009 (9)\n+514B76 Comment Length        0000 (0)\n+514B78 Disk Start            0000 (0)\n+514B7A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514B7C Ext File Attributes   00000000 (0)\n+514B80 Local Header Offset   0002F861 (194657)\n+514B84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514B84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514BFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514C00   Length              0005 (5)\n+514C02   Flags               01 (1) 'Modification'\n+514C03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514C07 CENTRAL HEADER #83    02014B50 (33639248)\n+514C0B Created Zip Spec      14 (20) '2.0'\n+514C0C Created OS            00 (0) 'MS-DOS'\n+514C0D Extract Zip Spec      14 (20) '2.0'\n+514C0E Extract OS            00 (0) 'MS-DOS'\n+514C0F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514C11 Compression Method    0000 (0) 'Stored'\n+514C13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514C17 CRC                   896578EC (2305128684)\n+514C1B Compressed Size       00001327 (4903)\n+514C1F Uncompressed Size     00001327 (4903)\n+514C23 Filename Length       0090 (144)\n+514C25 Extra Length          0009 (9)\n+514C27 Comment Length        0000 (0)\n+514C29 Disk Start            0000 (0)\n+514C2B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514C2D Ext File Attributes   00000000 (0)\n+514C31 Local Header Offset   0002F902 (194818)\n+514C35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x514CB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x514C35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-514D46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514D48   Length              0005 (5)\n-514D4A   Flags               01 (1) 'Modification'\n-514D4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514D4F CENTRAL HEADER #84    02014B50 (33639248)\n-514D53 Created Zip Spec      14 (20) '2.0'\n-514D54 Created OS            00 (0) 'MS-DOS'\n-514D55 Extract Zip Spec      14 (20) '2.0'\n-514D56 Extract OS            00 (0) 'MS-DOS'\n-514D57 General Purpose Flag  0000 (0)\n-514D59 Compression Method    0000 (0) 'Stored'\n-514D5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514D5F CRC                   00000000 (0)\n-514D63 Compressed Size       00000000 (0)\n-514D67 Uncompressed Size     00000000 (0)\n-514D6B Filename Length       003B (59)\n-514D6D Extra Length          0009 (9)\n-514D6F Comment Length        0000 (0)\n-514D71 Disk Start            0000 (0)\n-514D73 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514D75 Ext File Attributes   00000000 (0)\n-514D79 Local Header Offset   00030D59 (200025)\n-514D7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514D7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514DB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514DBA   Length              0005 (5)\n-514DBC   Flags               01 (1) 'Modification'\n-514DBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514DC1 CENTRAL HEADER #85    02014B50 (33639248)\n-514DC5 Created Zip Spec      14 (20) '2.0'\n-514DC6 Created OS            00 (0) 'MS-DOS'\n-514DC7 Extract Zip Spec      14 (20) '2.0'\n-514DC8 Extract OS            00 (0) 'MS-DOS'\n-514DC9 General Purpose Flag  0000 (0)\n-514DCB Compression Method    0000 (0) 'Stored'\n-514DCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514DD1 CRC                   00000000 (0)\n-514DD5 Compressed Size       00000000 (0)\n-514DD9 Uncompressed Size     00000000 (0)\n-514DDD Filename Length       0044 (68)\n-514DDF Extra Length          0009 (9)\n-514DE1 Comment Length        0000 (0)\n-514DE3 Disk Start            0000 (0)\n-514DE5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514DE7 Ext File Attributes   00000000 (0)\n-514DEB Local Header Offset   00030DBB (200123)\n-514DEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514DEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514E33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514E35   Length              0005 (5)\n-514E37   Flags               01 (1) 'Modification'\n-514E38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514E3C CENTRAL HEADER #86    02014B50 (33639248)\n-514E40 Created Zip Spec      14 (20) '2.0'\n-514E41 Created OS            00 (0) 'MS-DOS'\n-514E42 Extract Zip Spec      14 (20) '2.0'\n-514E43 Extract OS            00 (0) 'MS-DOS'\n-514E44 General Purpose Flag  0000 (0)\n-514E46 Compression Method    0000 (0) 'Stored'\n-514E48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514E4C CRC                   00000000 (0)\n-514E50 Compressed Size       00000000 (0)\n-514E54 Uncompressed Size     00000000 (0)\n-514E58 Filename Length       0081 (129)\n-514E5A Extra Length          0009 (9)\n-514E5C Comment Length        0000 (0)\n-514E5E Disk Start            0000 (0)\n-514E60 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514E62 Ext File Attributes   00000000 (0)\n-514E66 Local Header Offset   00030E26 (200230)\n-514E6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514E6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-514EEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514EED   Length              0005 (5)\n-514EEF   Flags               01 (1) 'Modification'\n-514EF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514EF4 CENTRAL HEADER #87    02014B50 (33639248)\n-514EF8 Created Zip Spec      14 (20) '2.0'\n-514EF9 Created OS            00 (0) 'MS-DOS'\n-514EFA Extract Zip Spec      14 (20) '2.0'\n-514EFB Extract OS            00 (0) 'MS-DOS'\n-514EFC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-514EFE Compression Method    0000 (0) 'Stored'\n-514F00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514F04 CRC                   64624734 (1684162356)\n-514F08 Compressed Size       00000D24 (3364)\n-514F0C Uncompressed Size     00000D24 (3364)\n-514F10 Filename Length       0097 (151)\n-514F12 Extra Length          0009 (9)\n-514F14 Comment Length        0000 (0)\n-514F16 Disk Start            0000 (0)\n-514F18 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514F1A Ext File Attributes   00000000 (0)\n-514F1E Local Header Offset   00030ECE (200398)\n-514F22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+514CC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514CC7   Length              0005 (5)\n+514CC9   Flags               01 (1) 'Modification'\n+514CCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514CCE CENTRAL HEADER #84    02014B50 (33639248)\n+514CD2 Created Zip Spec      14 (20) '2.0'\n+514CD3 Created OS            00 (0) 'MS-DOS'\n+514CD4 Extract Zip Spec      14 (20) '2.0'\n+514CD5 Extract OS            00 (0) 'MS-DOS'\n+514CD6 General Purpose Flag  0000 (0)\n+514CD8 Compression Method    0000 (0) 'Stored'\n+514CDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514CDE CRC                   00000000 (0)\n+514CE2 Compressed Size       00000000 (0)\n+514CE6 Uncompressed Size     00000000 (0)\n+514CEA Filename Length       003B (59)\n+514CEC Extra Length          0009 (9)\n+514CEE Comment Length        0000 (0)\n+514CF0 Disk Start            0000 (0)\n+514CF2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514CF4 Ext File Attributes   00000000 (0)\n+514CF8 Local Header Offset   00030CF0 (199920)\n+514CFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514CFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514D37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514D39   Length              0005 (5)\n+514D3B   Flags               01 (1) 'Modification'\n+514D3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514D40 CENTRAL HEADER #85    02014B50 (33639248)\n+514D44 Created Zip Spec      14 (20) '2.0'\n+514D45 Created OS            00 (0) 'MS-DOS'\n+514D46 Extract Zip Spec      14 (20) '2.0'\n+514D47 Extract OS            00 (0) 'MS-DOS'\n+514D48 General Purpose Flag  0000 (0)\n+514D4A Compression Method    0000 (0) 'Stored'\n+514D4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514D50 CRC                   00000000 (0)\n+514D54 Compressed Size       00000000 (0)\n+514D58 Uncompressed Size     00000000 (0)\n+514D5C Filename Length       0044 (68)\n+514D5E Extra Length          0009 (9)\n+514D60 Comment Length        0000 (0)\n+514D62 Disk Start            0000 (0)\n+514D64 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514D66 Ext File Attributes   00000000 (0)\n+514D6A Local Header Offset   00030D52 (200018)\n+514D6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514D6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514DB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514DB4   Length              0005 (5)\n+514DB6   Flags               01 (1) 'Modification'\n+514DB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514DBB CENTRAL HEADER #86    02014B50 (33639248)\n+514DBF Created Zip Spec      14 (20) '2.0'\n+514DC0 Created OS            00 (0) 'MS-DOS'\n+514DC1 Extract Zip Spec      14 (20) '2.0'\n+514DC2 Extract OS            00 (0) 'MS-DOS'\n+514DC3 General Purpose Flag  0000 (0)\n+514DC5 Compression Method    0000 (0) 'Stored'\n+514DC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514DCB CRC                   00000000 (0)\n+514DCF Compressed Size       00000000 (0)\n+514DD3 Uncompressed Size     00000000 (0)\n+514DD7 Filename Length       0081 (129)\n+514DD9 Extra Length          0009 (9)\n+514DDB Comment Length        0000 (0)\n+514DDD Disk Start            0000 (0)\n+514DDF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514DE1 Ext File Attributes   00000000 (0)\n+514DE5 Local Header Offset   00030DBD (200125)\n+514DE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514DE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514E6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514E6C   Length              0005 (5)\n+514E6E   Flags               01 (1) 'Modification'\n+514E6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514E73 CENTRAL HEADER #87    02014B50 (33639248)\n+514E77 Created Zip Spec      14 (20) '2.0'\n+514E78 Created OS            00 (0) 'MS-DOS'\n+514E79 Extract Zip Spec      14 (20) '2.0'\n+514E7A Extract OS            00 (0) 'MS-DOS'\n+514E7B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514E7D Compression Method    0000 (0) 'Stored'\n+514E7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514E83 CRC                   64624734 (1684162356)\n+514E87 Compressed Size       00000D24 (3364)\n+514E8B Uncompressed Size     00000D24 (3364)\n+514E8F Filename Length       0097 (151)\n+514E91 Extra Length          0009 (9)\n+514E93 Comment Length        0000 (0)\n+514E95 Disk Start            0000 (0)\n+514E97 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514E99 Ext File Attributes   00000000 (0)\n+514E9D Local Header Offset   00030E65 (200293)\n+514EA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x514F22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x514EA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-514FB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-514FBB   Length              0005 (5)\n-514FBD   Flags               01 (1) 'Modification'\n-514FBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-514FC2 CENTRAL HEADER #88    02014B50 (33639248)\n-514FC6 Created Zip Spec      14 (20) '2.0'\n-514FC7 Created OS            00 (0) 'MS-DOS'\n-514FC8 Extract Zip Spec      14 (20) '2.0'\n-514FC9 Extract OS            00 (0) 'MS-DOS'\n-514FCA General Purpose Flag  0000 (0)\n-514FCC Compression Method    0000 (0) 'Stored'\n-514FCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-514FD2 CRC                   00000000 (0)\n-514FD6 Compressed Size       00000000 (0)\n-514FDA Uncompressed Size     00000000 (0)\n-514FDE Filename Length       007D (125)\n-514FE0 Extra Length          0009 (9)\n-514FE2 Comment Length        0000 (0)\n-514FE4 Disk Start            0000 (0)\n-514FE6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-514FE8 Ext File Attributes   00000000 (0)\n-514FEC Local Header Offset   00031CC0 (203968)\n-514FF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x514FF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51506D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51506F   Length              0005 (5)\n-515071   Flags               01 (1) 'Modification'\n-515072   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515076 CENTRAL HEADER #89    02014B50 (33639248)\n-51507A Created Zip Spec      14 (20) '2.0'\n-51507B Created OS            00 (0) 'MS-DOS'\n-51507C Extract Zip Spec      14 (20) '2.0'\n-51507D Extract OS            00 (0) 'MS-DOS'\n-51507E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515080 Compression Method    0000 (0) 'Stored'\n-515082 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515086 CRC                   2B6EF697 (728692375)\n-51508A Compressed Size       000008CD (2253)\n-51508E Uncompressed Size     000008CD (2253)\n-515092 Filename Length       0093 (147)\n-515094 Extra Length          0009 (9)\n-515096 Comment Length        0000 (0)\n-515098 Disk Start            0000 (0)\n-51509A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51509C Ext File Attributes   00000000 (0)\n-5150A0 Local Header Offset   00031D64 (204132)\n-5150A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+514F38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514F3A   Length              0005 (5)\n+514F3C   Flags               01 (1) 'Modification'\n+514F3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514F41 CENTRAL HEADER #88    02014B50 (33639248)\n+514F45 Created Zip Spec      14 (20) '2.0'\n+514F46 Created OS            00 (0) 'MS-DOS'\n+514F47 Extract Zip Spec      14 (20) '2.0'\n+514F48 Extract OS            00 (0) 'MS-DOS'\n+514F49 General Purpose Flag  0000 (0)\n+514F4B Compression Method    0000 (0) 'Stored'\n+514F4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+514F51 CRC                   00000000 (0)\n+514F55 Compressed Size       00000000 (0)\n+514F59 Uncompressed Size     00000000 (0)\n+514F5D Filename Length       007D (125)\n+514F5F Extra Length          0009 (9)\n+514F61 Comment Length        0000 (0)\n+514F63 Disk Start            0000 (0)\n+514F65 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+514F67 Ext File Attributes   00000000 (0)\n+514F6B Local Header Offset   00031C57 (203863)\n+514F6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x514F6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+514FEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+514FEE   Length              0005 (5)\n+514FF0   Flags               01 (1) 'Modification'\n+514FF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+514FF5 CENTRAL HEADER #89    02014B50 (33639248)\n+514FF9 Created Zip Spec      14 (20) '2.0'\n+514FFA Created OS            00 (0) 'MS-DOS'\n+514FFB Extract Zip Spec      14 (20) '2.0'\n+514FFC Extract OS            00 (0) 'MS-DOS'\n+514FFD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+514FFF Compression Method    0000 (0) 'Stored'\n+515001 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515005 CRC                   2B6EF697 (728692375)\n+515009 Compressed Size       000008CD (2253)\n+51500D Uncompressed Size     000008CD (2253)\n+515011 Filename Length       0093 (147)\n+515013 Extra Length          0009 (9)\n+515015 Comment Length        0000 (0)\n+515017 Disk Start            0000 (0)\n+515019 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51501B Ext File Attributes   00000000 (0)\n+51501F Local Header Offset   00031CFB (204027)\n+515023 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5150A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515023: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515137 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515139   Length              0005 (5)\n-51513B   Flags               01 (1) 'Modification'\n-51513C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515140 CENTRAL HEADER #90    02014B50 (33639248)\n-515144 Created Zip Spec      14 (20) '2.0'\n-515145 Created OS            00 (0) 'MS-DOS'\n-515146 Extract Zip Spec      14 (20) '2.0'\n-515147 Extract OS            00 (0) 'MS-DOS'\n-515148 General Purpose Flag  0000 (0)\n-51514A Compression Method    0000 (0) 'Stored'\n-51514C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515150 CRC                   00000000 (0)\n-515154 Compressed Size       00000000 (0)\n-515158 Uncompressed Size     00000000 (0)\n-51515C Filename Length       0034 (52)\n-51515E Extra Length          0009 (9)\n-515160 Comment Length        0000 (0)\n-515162 Disk Start            0000 (0)\n-515164 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515166 Ext File Attributes   00000000 (0)\n-51516A Local Header Offset   000326FB (206587)\n-51516E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51516E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5151A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5151A4   Length              0005 (5)\n-5151A6   Flags               01 (1) 'Modification'\n-5151A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5151AB CENTRAL HEADER #91    02014B50 (33639248)\n-5151AF Created Zip Spec      14 (20) '2.0'\n-5151B0 Created OS            00 (0) 'MS-DOS'\n-5151B1 Extract Zip Spec      14 (20) '2.0'\n-5151B2 Extract OS            00 (0) 'MS-DOS'\n-5151B3 General Purpose Flag  0000 (0)\n-5151B5 Compression Method    0000 (0) 'Stored'\n-5151B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5151BB CRC                   00000000 (0)\n-5151BF Compressed Size       00000000 (0)\n-5151C3 Uncompressed Size     00000000 (0)\n-5151C7 Filename Length       003D (61)\n-5151C9 Extra Length          0009 (9)\n-5151CB Comment Length        0000 (0)\n-5151CD Disk Start            0000 (0)\n-5151CF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5151D1 Ext File Attributes   00000000 (0)\n-5151D5 Local Header Offset   00032756 (206678)\n-5151D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5151D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515216 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515218   Length              0005 (5)\n-51521A   Flags               01 (1) 'Modification'\n-51521B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51521F CENTRAL HEADER #92    02014B50 (33639248)\n-515223 Created Zip Spec      14 (20) '2.0'\n-515224 Created OS            00 (0) 'MS-DOS'\n-515225 Extract Zip Spec      14 (20) '2.0'\n-515226 Extract OS            00 (0) 'MS-DOS'\n-515227 General Purpose Flag  0000 (0)\n-515229 Compression Method    0000 (0) 'Stored'\n-51522B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51522F CRC                   00000000 (0)\n-515233 Compressed Size       00000000 (0)\n-515237 Uncompressed Size     00000000 (0)\n-51523B Filename Length       007B (123)\n-51523D Extra Length          0009 (9)\n-51523F Comment Length        0000 (0)\n-515241 Disk Start            0000 (0)\n-515243 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515245 Ext File Attributes   00000000 (0)\n-515249 Local Header Offset   000327BA (206778)\n-51524D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51524D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5152C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5152CA   Length              0005 (5)\n-5152CC   Flags               01 (1) 'Modification'\n-5152CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5152D1 CENTRAL HEADER #93    02014B50 (33639248)\n-5152D5 Created Zip Spec      14 (20) '2.0'\n-5152D6 Created OS            00 (0) 'MS-DOS'\n-5152D7 Extract Zip Spec      14 (20) '2.0'\n-5152D8 Extract OS            00 (0) 'MS-DOS'\n-5152D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5152DB Compression Method    0000 (0) 'Stored'\n-5152DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5152E1 CRC                   DBC79151 (3687289169)\n-5152E5 Compressed Size       000013B1 (5041)\n-5152E9 Uncompressed Size     000013B1 (5041)\n-5152ED Filename Length       0091 (145)\n-5152EF Extra Length          0009 (9)\n-5152F1 Comment Length        0000 (0)\n-5152F3 Disk Start            0000 (0)\n-5152F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5152F7 Ext File Attributes   00000000 (0)\n-5152FB Local Header Offset   0003285C (206940)\n-5152FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5150B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5150B8   Length              0005 (5)\n+5150BA   Flags               01 (1) 'Modification'\n+5150BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5150BF CENTRAL HEADER #90    02014B50 (33639248)\n+5150C3 Created Zip Spec      14 (20) '2.0'\n+5150C4 Created OS            00 (0) 'MS-DOS'\n+5150C5 Extract Zip Spec      14 (20) '2.0'\n+5150C6 Extract OS            00 (0) 'MS-DOS'\n+5150C7 General Purpose Flag  0000 (0)\n+5150C9 Compression Method    0000 (0) 'Stored'\n+5150CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5150CF CRC                   00000000 (0)\n+5150D3 Compressed Size       00000000 (0)\n+5150D7 Uncompressed Size     00000000 (0)\n+5150DB Filename Length       0034 (52)\n+5150DD Extra Length          0009 (9)\n+5150DF Comment Length        0000 (0)\n+5150E1 Disk Start            0000 (0)\n+5150E3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5150E5 Ext File Attributes   00000000 (0)\n+5150E9 Local Header Offset   00032692 (206482)\n+5150ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5150ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515121 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515123   Length              0005 (5)\n+515125   Flags               01 (1) 'Modification'\n+515126   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51512A CENTRAL HEADER #91    02014B50 (33639248)\n+51512E Created Zip Spec      14 (20) '2.0'\n+51512F Created OS            00 (0) 'MS-DOS'\n+515130 Extract Zip Spec      14 (20) '2.0'\n+515131 Extract OS            00 (0) 'MS-DOS'\n+515132 General Purpose Flag  0000 (0)\n+515134 Compression Method    0000 (0) 'Stored'\n+515136 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51513A CRC                   00000000 (0)\n+51513E Compressed Size       00000000 (0)\n+515142 Uncompressed Size     00000000 (0)\n+515146 Filename Length       003D (61)\n+515148 Extra Length          0009 (9)\n+51514A Comment Length        0000 (0)\n+51514C Disk Start            0000 (0)\n+51514E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515150 Ext File Attributes   00000000 (0)\n+515154 Local Header Offset   000326ED (206573)\n+515158 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515158: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515195 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515197   Length              0005 (5)\n+515199   Flags               01 (1) 'Modification'\n+51519A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51519E CENTRAL HEADER #92    02014B50 (33639248)\n+5151A2 Created Zip Spec      14 (20) '2.0'\n+5151A3 Created OS            00 (0) 'MS-DOS'\n+5151A4 Extract Zip Spec      14 (20) '2.0'\n+5151A5 Extract OS            00 (0) 'MS-DOS'\n+5151A6 General Purpose Flag  0000 (0)\n+5151A8 Compression Method    0000 (0) 'Stored'\n+5151AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5151AE CRC                   00000000 (0)\n+5151B2 Compressed Size       00000000 (0)\n+5151B6 Uncompressed Size     00000000 (0)\n+5151BA Filename Length       007B (123)\n+5151BC Extra Length          0009 (9)\n+5151BE Comment Length        0000 (0)\n+5151C0 Disk Start            0000 (0)\n+5151C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5151C4 Ext File Attributes   00000000 (0)\n+5151C8 Local Header Offset   00032751 (206673)\n+5151CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5151CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515247 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515249   Length              0005 (5)\n+51524B   Flags               01 (1) 'Modification'\n+51524C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515250 CENTRAL HEADER #93    02014B50 (33639248)\n+515254 Created Zip Spec      14 (20) '2.0'\n+515255 Created OS            00 (0) 'MS-DOS'\n+515256 Extract Zip Spec      14 (20) '2.0'\n+515257 Extract OS            00 (0) 'MS-DOS'\n+515258 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51525A Compression Method    0000 (0) 'Stored'\n+51525C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515260 CRC                   DBC79151 (3687289169)\n+515264 Compressed Size       000013B1 (5041)\n+515268 Uncompressed Size     000013B1 (5041)\n+51526C Filename Length       0091 (145)\n+51526E Extra Length          0009 (9)\n+515270 Comment Length        0000 (0)\n+515272 Disk Start            0000 (0)\n+515274 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515276 Ext File Attributes   00000000 (0)\n+51527A Local Header Offset   000327F3 (206835)\n+51527E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5152FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51527E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515390 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515392   Length              0005 (5)\n-515394   Flags               01 (1) 'Modification'\n-515395   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515399 CENTRAL HEADER #94    02014B50 (33639248)\n-51539D Created Zip Spec      14 (20) '2.0'\n-51539E Created OS            00 (0) 'MS-DOS'\n-51539F Extract Zip Spec      14 (20) '2.0'\n-5153A0 Extract OS            00 (0) 'MS-DOS'\n-5153A1 General Purpose Flag  0000 (0)\n-5153A3 Compression Method    0000 (0) 'Stored'\n-5153A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5153A9 CRC                   00000000 (0)\n-5153AD Compressed Size       00000000 (0)\n-5153B1 Uncompressed Size     00000000 (0)\n-5153B5 Filename Length       0081 (129)\n-5153B7 Extra Length          0009 (9)\n-5153B9 Comment Length        0000 (0)\n-5153BB Disk Start            0000 (0)\n-5153BD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5153BF Ext File Attributes   00000000 (0)\n-5153C3 Local Header Offset   00033CD5 (212181)\n-5153C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5153C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515448 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51544A   Length              0005 (5)\n-51544C   Flags               01 (1) 'Modification'\n-51544D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515451 CENTRAL HEADER #95    02014B50 (33639248)\n-515455 Created Zip Spec      14 (20) '2.0'\n-515456 Created OS            00 (0) 'MS-DOS'\n-515457 Extract Zip Spec      14 (20) '2.0'\n-515458 Extract OS            00 (0) 'MS-DOS'\n-515459 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51545B Compression Method    0000 (0) 'Stored'\n-51545D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515461 CRC                   9AFFB21B (2600448539)\n-515465 Compressed Size       0000064E (1614)\n-515469 Uncompressed Size     0000064E (1614)\n-51546D Filename Length       0097 (151)\n-51546F Extra Length          0009 (9)\n-515471 Comment Length        0000 (0)\n-515473 Disk Start            0000 (0)\n-515475 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515477 Ext File Attributes   00000000 (0)\n-51547B Local Header Offset   00033D7D (212349)\n-51547F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51530F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515311   Length              0005 (5)\n+515313   Flags               01 (1) 'Modification'\n+515314   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515318 CENTRAL HEADER #94    02014B50 (33639248)\n+51531C Created Zip Spec      14 (20) '2.0'\n+51531D Created OS            00 (0) 'MS-DOS'\n+51531E Extract Zip Spec      14 (20) '2.0'\n+51531F Extract OS            00 (0) 'MS-DOS'\n+515320 General Purpose Flag  0000 (0)\n+515322 Compression Method    0000 (0) 'Stored'\n+515324 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515328 CRC                   00000000 (0)\n+51532C Compressed Size       00000000 (0)\n+515330 Uncompressed Size     00000000 (0)\n+515334 Filename Length       0081 (129)\n+515336 Extra Length          0009 (9)\n+515338 Comment Length        0000 (0)\n+51533A Disk Start            0000 (0)\n+51533C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51533E Ext File Attributes   00000000 (0)\n+515342 Local Header Offset   00033C6C (212076)\n+515346 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515346: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5153C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5153C9   Length              0005 (5)\n+5153CB   Flags               01 (1) 'Modification'\n+5153CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5153D0 CENTRAL HEADER #95    02014B50 (33639248)\n+5153D4 Created Zip Spec      14 (20) '2.0'\n+5153D5 Created OS            00 (0) 'MS-DOS'\n+5153D6 Extract Zip Spec      14 (20) '2.0'\n+5153D7 Extract OS            00 (0) 'MS-DOS'\n+5153D8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5153DA Compression Method    0000 (0) 'Stored'\n+5153DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5153E0 CRC                   9AFFB21B (2600448539)\n+5153E4 Compressed Size       0000064E (1614)\n+5153E8 Uncompressed Size     0000064E (1614)\n+5153EC Filename Length       0097 (151)\n+5153EE Extra Length          0009 (9)\n+5153F0 Comment Length        0000 (0)\n+5153F2 Disk Start            0000 (0)\n+5153F4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5153F6 Ext File Attributes   00000000 (0)\n+5153FA Local Header Offset   00033D14 (212244)\n+5153FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x51547F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5153FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515518   Length              0005 (5)\n-51551A   Flags               01 (1) 'Modification'\n-51551B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51551F CENTRAL HEADER #96    02014B50 (33639248)\n-515523 Created Zip Spec      14 (20) '2.0'\n-515524 Created OS            00 (0) 'MS-DOS'\n-515525 Extract Zip Spec      14 (20) '2.0'\n-515526 Extract OS            00 (0) 'MS-DOS'\n-515527 General Purpose Flag  0000 (0)\n-515529 Compression Method    0000 (0) 'Stored'\n-51552B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51552F CRC                   00000000 (0)\n-515533 Compressed Size       00000000 (0)\n-515537 Uncompressed Size     00000000 (0)\n-51553B Filename Length       007D (125)\n-51553D Extra Length          0009 (9)\n-51553F Comment Length        0000 (0)\n-515541 Disk Start            0000 (0)\n-515543 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515545 Ext File Attributes   00000000 (0)\n-515549 Local Header Offset   00034499 (214169)\n-51554D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51554D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5155CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5155CC   Length              0005 (5)\n-5155CE   Flags               01 (1) 'Modification'\n-5155CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5155D3 CENTRAL HEADER #97    02014B50 (33639248)\n-5155D7 Created Zip Spec      14 (20) '2.0'\n-5155D8 Created OS            00 (0) 'MS-DOS'\n-5155D9 Extract Zip Spec      14 (20) '2.0'\n-5155DA Extract OS            00 (0) 'MS-DOS'\n-5155DB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5155DD Compression Method    0000 (0) 'Stored'\n-5155DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5155E3 CRC                   88CF36AA (2295281322)\n-5155E7 Compressed Size       00000A4F (2639)\n-5155EB Uncompressed Size     00000A4F (2639)\n-5155EF Filename Length       0093 (147)\n-5155F1 Extra Length          0009 (9)\n-5155F3 Comment Length        0000 (0)\n-5155F5 Disk Start            0000 (0)\n-5155F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5155F9 Ext File Attributes   00000000 (0)\n-5155FD Local Header Offset   0003453D (214333)\n-515601 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+515495 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515497   Length              0005 (5)\n+515499   Flags               01 (1) 'Modification'\n+51549A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51549E CENTRAL HEADER #96    02014B50 (33639248)\n+5154A2 Created Zip Spec      14 (20) '2.0'\n+5154A3 Created OS            00 (0) 'MS-DOS'\n+5154A4 Extract Zip Spec      14 (20) '2.0'\n+5154A5 Extract OS            00 (0) 'MS-DOS'\n+5154A6 General Purpose Flag  0000 (0)\n+5154A8 Compression Method    0000 (0) 'Stored'\n+5154AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5154AE CRC                   00000000 (0)\n+5154B2 Compressed Size       00000000 (0)\n+5154B6 Uncompressed Size     00000000 (0)\n+5154BA Filename Length       007D (125)\n+5154BC Extra Length          0009 (9)\n+5154BE Comment Length        0000 (0)\n+5154C0 Disk Start            0000 (0)\n+5154C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5154C4 Ext File Attributes   00000000 (0)\n+5154C8 Local Header Offset   00034430 (214064)\n+5154CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5154CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515549 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51554B   Length              0005 (5)\n+51554D   Flags               01 (1) 'Modification'\n+51554E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515552 CENTRAL HEADER #97    02014B50 (33639248)\n+515556 Created Zip Spec      14 (20) '2.0'\n+515557 Created OS            00 (0) 'MS-DOS'\n+515558 Extract Zip Spec      14 (20) '2.0'\n+515559 Extract OS            00 (0) 'MS-DOS'\n+51555A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51555C Compression Method    0000 (0) 'Stored'\n+51555E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515562 CRC                   88CF36AA (2295281322)\n+515566 Compressed Size       00000A4F (2639)\n+51556A Uncompressed Size     00000A4F (2639)\n+51556E Filename Length       0093 (147)\n+515570 Extra Length          0009 (9)\n+515572 Comment Length        0000 (0)\n+515574 Disk Start            0000 (0)\n+515576 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515578 Ext File Attributes   00000000 (0)\n+51557C Local Header Offset   000344D4 (214228)\n+515580 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x515601: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515580: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515694 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515696   Length              0005 (5)\n-515698   Flags               01 (1) 'Modification'\n-515699   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51569D CENTRAL HEADER #98    02014B50 (33639248)\n-5156A1 Created Zip Spec      14 (20) '2.0'\n-5156A2 Created OS            00 (0) 'MS-DOS'\n-5156A3 Extract Zip Spec      14 (20) '2.0'\n-5156A4 Extract OS            00 (0) 'MS-DOS'\n-5156A5 General Purpose Flag  0000 (0)\n-5156A7 Compression Method    0000 (0) 'Stored'\n-5156A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5156AD CRC                   00000000 (0)\n-5156B1 Compressed Size       00000000 (0)\n-5156B5 Uncompressed Size     00000000 (0)\n-5156B9 Filename Length       0086 (134)\n-5156BB Extra Length          0009 (9)\n-5156BD Comment Length        0000 (0)\n-5156BF Disk Start            0000 (0)\n-5156C1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5156C3 Ext File Attributes   00000000 (0)\n-5156C7 Local Header Offset   00035056 (217174)\n-5156CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+515613 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515615   Length              0005 (5)\n+515617   Flags               01 (1) 'Modification'\n+515618   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51561C CENTRAL HEADER #98    02014B50 (33639248)\n+515620 Created Zip Spec      14 (20) '2.0'\n+515621 Created OS            00 (0) 'MS-DOS'\n+515622 Extract Zip Spec      14 (20) '2.0'\n+515623 Extract OS            00 (0) 'MS-DOS'\n+515624 General Purpose Flag  0000 (0)\n+515626 Compression Method    0000 (0) 'Stored'\n+515628 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51562C CRC                   00000000 (0)\n+515630 Compressed Size       00000000 (0)\n+515634 Uncompressed Size     00000000 (0)\n+515638 Filename Length       0086 (134)\n+51563A Extra Length          0009 (9)\n+51563C Comment Length        0000 (0)\n+51563E Disk Start            0000 (0)\n+515640 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515642 Ext File Attributes   00000000 (0)\n+515646 Local Header Offset   00034FED (217069)\n+51564A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x5156CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51564A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515751 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515753   Length              0005 (5)\n-515755   Flags               01 (1) 'Modification'\n-515756   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51575A CENTRAL HEADER #99    02014B50 (33639248)\n-51575E Created Zip Spec      14 (20) '2.0'\n-51575F Created OS            00 (0) 'MS-DOS'\n-515760 Extract Zip Spec      14 (20) '2.0'\n-515761 Extract OS            00 (0) 'MS-DOS'\n-515762 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515764 Compression Method    0000 (0) 'Stored'\n-515766 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51576A CRC                   9593555C (2509460828)\n-51576E Compressed Size       00000D05 (3333)\n-515772 Uncompressed Size     00000D05 (3333)\n-515776 Filename Length       009C (156)\n-515778 Extra Length          0009 (9)\n-51577A Comment Length        0000 (0)\n-51577C Disk Start            0000 (0)\n-51577E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515780 Ext File Attributes   00000000 (0)\n-515784 Local Header Offset   00035103 (217347)\n-515788 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5156D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5156D2   Length              0005 (5)\n+5156D4   Flags               01 (1) 'Modification'\n+5156D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5156D9 CENTRAL HEADER #99    02014B50 (33639248)\n+5156DD Created Zip Spec      14 (20) '2.0'\n+5156DE Created OS            00 (0) 'MS-DOS'\n+5156DF Extract Zip Spec      14 (20) '2.0'\n+5156E0 Extract OS            00 (0) 'MS-DOS'\n+5156E1 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5156E3 Compression Method    0000 (0) 'Stored'\n+5156E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5156E9 CRC                   9593555C (2509460828)\n+5156ED Compressed Size       00000D05 (3333)\n+5156F1 Uncompressed Size     00000D05 (3333)\n+5156F5 Filename Length       009C (156)\n+5156F7 Extra Length          0009 (9)\n+5156F9 Comment Length        0000 (0)\n+5156FB Disk Start            0000 (0)\n+5156FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5156FF Ext File Attributes   00000000 (0)\n+515703 Local Header Offset   0003509A (217242)\n+515707 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x515788: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515707: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515824 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515826   Length              0005 (5)\n-515828   Flags               01 (1) 'Modification'\n-515829   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51582D CENTRAL HEADER #100   02014B50 (33639248)\n-515831 Created Zip Spec      14 (20) '2.0'\n-515832 Created OS            00 (0) 'MS-DOS'\n-515833 Extract Zip Spec      14 (20) '2.0'\n-515834 Extract OS            00 (0) 'MS-DOS'\n-515835 General Purpose Flag  0000 (0)\n-515837 Compression Method    0000 (0) 'Stored'\n-515839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51583D CRC                   00000000 (0)\n-515841 Compressed Size       00000000 (0)\n-515845 Uncompressed Size     00000000 (0)\n-515849 Filename Length       007B (123)\n-51584B Extra Length          0009 (9)\n-51584D Comment Length        0000 (0)\n-51584F Disk Start            0000 (0)\n-515851 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515853 Ext File Attributes   00000000 (0)\n-515857 Local Header Offset   00035EDB (220891)\n-51585B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51585B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5158D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5158D8   Length              0005 (5)\n-5158DA   Flags               01 (1) 'Modification'\n-5158DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5158DF CENTRAL HEADER #101   02014B50 (33639248)\n-5158E3 Created Zip Spec      14 (20) '2.0'\n-5158E4 Created OS            00 (0) 'MS-DOS'\n-5158E5 Extract Zip Spec      14 (20) '2.0'\n-5158E6 Extract OS            00 (0) 'MS-DOS'\n-5158E7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5158E9 Compression Method    0000 (0) 'Stored'\n-5158EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5158EF CRC                   9640338D (2520789901)\n-5158F3 Compressed Size       000013DD (5085)\n-5158F7 Uncompressed Size     000013DD (5085)\n-5158FB Filename Length       0091 (145)\n-5158FD Extra Length          0009 (9)\n-5158FF Comment Length        0000 (0)\n-515901 Disk Start            0000 (0)\n-515903 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515905 Ext File Attributes   00000000 (0)\n-515909 Local Header Offset   00035F7D (221053)\n-51590D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5157A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5157A5   Length              0005 (5)\n+5157A7   Flags               01 (1) 'Modification'\n+5157A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5157AC CENTRAL HEADER #100   02014B50 (33639248)\n+5157B0 Created Zip Spec      14 (20) '2.0'\n+5157B1 Created OS            00 (0) 'MS-DOS'\n+5157B2 Extract Zip Spec      14 (20) '2.0'\n+5157B3 Extract OS            00 (0) 'MS-DOS'\n+5157B4 General Purpose Flag  0000 (0)\n+5157B6 Compression Method    0000 (0) 'Stored'\n+5157B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5157BC CRC                   00000000 (0)\n+5157C0 Compressed Size       00000000 (0)\n+5157C4 Uncompressed Size     00000000 (0)\n+5157C8 Filename Length       007B (123)\n+5157CA Extra Length          0009 (9)\n+5157CC Comment Length        0000 (0)\n+5157CE Disk Start            0000 (0)\n+5157D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5157D2 Ext File Attributes   00000000 (0)\n+5157D6 Local Header Offset   00035E72 (220786)\n+5157DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5157DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515855 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515857   Length              0005 (5)\n+515859   Flags               01 (1) 'Modification'\n+51585A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51585E CENTRAL HEADER #101   02014B50 (33639248)\n+515862 Created Zip Spec      14 (20) '2.0'\n+515863 Created OS            00 (0) 'MS-DOS'\n+515864 Extract Zip Spec      14 (20) '2.0'\n+515865 Extract OS            00 (0) 'MS-DOS'\n+515866 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+515868 Compression Method    0000 (0) 'Stored'\n+51586A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51586E CRC                   9640338D (2520789901)\n+515872 Compressed Size       000013DD (5085)\n+515876 Uncompressed Size     000013DD (5085)\n+51587A Filename Length       0091 (145)\n+51587C Extra Length          0009 (9)\n+51587E Comment Length        0000 (0)\n+515880 Disk Start            0000 (0)\n+515882 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515884 Ext File Attributes   00000000 (0)\n+515888 Local Header Offset   00035F14 (220948)\n+51588C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x51590D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51588C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51599E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5159A0   Length              0005 (5)\n-5159A2   Flags               01 (1) 'Modification'\n-5159A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5159A7 CENTRAL HEADER #102   02014B50 (33639248)\n-5159AB Created Zip Spec      14 (20) '2.0'\n-5159AC Created OS            00 (0) 'MS-DOS'\n-5159AD Extract Zip Spec      14 (20) '2.0'\n-5159AE Extract OS            00 (0) 'MS-DOS'\n-5159AF General Purpose Flag  0000 (0)\n-5159B1 Compression Method    0000 (0) 'Stored'\n-5159B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5159B7 CRC                   00000000 (0)\n-5159BB Compressed Size       00000000 (0)\n-5159BF Uncompressed Size     00000000 (0)\n-5159C3 Filename Length       007D (125)\n-5159C5 Extra Length          0009 (9)\n-5159C7 Comment Length        0000 (0)\n-5159C9 Disk Start            0000 (0)\n-5159CB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5159CD Ext File Attributes   00000000 (0)\n-5159D1 Local Header Offset   00037422 (226338)\n-5159D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5159D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515A52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515A54   Length              0005 (5)\n-515A56   Flags               01 (1) 'Modification'\n-515A57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515A5B CENTRAL HEADER #103   02014B50 (33639248)\n-515A5F Created Zip Spec      14 (20) '2.0'\n-515A60 Created OS            00 (0) 'MS-DOS'\n-515A61 Extract Zip Spec      14 (20) '2.0'\n-515A62 Extract OS            00 (0) 'MS-DOS'\n-515A63 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515A65 Compression Method    0000 (0) 'Stored'\n-515A67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515A6B CRC                   5232B519 (1379054873)\n-515A6F Compressed Size       00001C1F (7199)\n-515A73 Uncompressed Size     00001C1F (7199)\n-515A77 Filename Length       0093 (147)\n-515A79 Extra Length          0009 (9)\n-515A7B Comment Length        0000 (0)\n-515A7D Disk Start            0000 (0)\n-515A7F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515A81 Ext File Attributes   00000000 (0)\n-515A85 Local Header Offset   000374C6 (226502)\n-515A89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51591D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51591F   Length              0005 (5)\n+515921   Flags               01 (1) 'Modification'\n+515922   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515926 CENTRAL HEADER #102   02014B50 (33639248)\n+51592A Created Zip Spec      14 (20) '2.0'\n+51592B Created OS            00 (0) 'MS-DOS'\n+51592C Extract Zip Spec      14 (20) '2.0'\n+51592D Extract OS            00 (0) 'MS-DOS'\n+51592E General Purpose Flag  0000 (0)\n+515930 Compression Method    0000 (0) 'Stored'\n+515932 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515936 CRC                   00000000 (0)\n+51593A Compressed Size       00000000 (0)\n+51593E Uncompressed Size     00000000 (0)\n+515942 Filename Length       007D (125)\n+515944 Extra Length          0009 (9)\n+515946 Comment Length        0000 (0)\n+515948 Disk Start            0000 (0)\n+51594A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51594C Ext File Attributes   00000000 (0)\n+515950 Local Header Offset   000373B9 (226233)\n+515954 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515954: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5159D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5159D3   Length              0005 (5)\n+5159D5   Flags               01 (1) 'Modification'\n+5159D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5159DA CENTRAL HEADER #103   02014B50 (33639248)\n+5159DE Created Zip Spec      14 (20) '2.0'\n+5159DF Created OS            00 (0) 'MS-DOS'\n+5159E0 Extract Zip Spec      14 (20) '2.0'\n+5159E1 Extract OS            00 (0) 'MS-DOS'\n+5159E2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5159E4 Compression Method    0000 (0) 'Stored'\n+5159E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5159EA CRC                   5232B519 (1379054873)\n+5159EE Compressed Size       00001C1F (7199)\n+5159F2 Uncompressed Size     00001C1F (7199)\n+5159F6 Filename Length       0093 (147)\n+5159F8 Extra Length          0009 (9)\n+5159FA Comment Length        0000 (0)\n+5159FC Disk Start            0000 (0)\n+5159FE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515A00 Ext File Attributes   00000000 (0)\n+515A04 Local Header Offset   0003745D (226397)\n+515A08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x515A89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515A08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515B1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515B1E   Length              0005 (5)\n-515B20   Flags               01 (1) 'Modification'\n-515B21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515B25 CENTRAL HEADER #104   02014B50 (33639248)\n-515B29 Created Zip Spec      14 (20) '2.0'\n-515B2A Created OS            00 (0) 'MS-DOS'\n-515B2B Extract Zip Spec      14 (20) '2.0'\n-515B2C Extract OS            00 (0) 'MS-DOS'\n-515B2D General Purpose Flag  0000 (0)\n-515B2F Compression Method    0000 (0) 'Stored'\n-515B31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515B35 CRC                   00000000 (0)\n-515B39 Compressed Size       00000000 (0)\n-515B3D Uncompressed Size     00000000 (0)\n-515B41 Filename Length       007A (122)\n-515B43 Extra Length          0009 (9)\n-515B45 Comment Length        0000 (0)\n-515B47 Disk Start            0000 (0)\n-515B49 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515B4B Ext File Attributes   00000000 (0)\n-515B4F Local Header Offset   000391AF (233903)\n-515B53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515B53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515BCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515BCF   Length              0005 (5)\n-515BD1   Flags               01 (1) 'Modification'\n-515BD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515BD6 CENTRAL HEADER #105   02014B50 (33639248)\n-515BDA Created Zip Spec      14 (20) '2.0'\n-515BDB Created OS            00 (0) 'MS-DOS'\n-515BDC Extract Zip Spec      14 (20) '2.0'\n-515BDD Extract OS            00 (0) 'MS-DOS'\n-515BDE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515BE0 Compression Method    0000 (0) 'Stored'\n-515BE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515BE6 CRC                   57267C45 (1462139973)\n-515BEA Compressed Size       000013D6 (5078)\n-515BEE Uncompressed Size     000013D6 (5078)\n-515BF2 Filename Length       0090 (144)\n-515BF4 Extra Length          0009 (9)\n-515BF6 Comment Length        0000 (0)\n-515BF8 Disk Start            0000 (0)\n-515BFA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515BFC Ext File Attributes   00000000 (0)\n-515C00 Local Header Offset   00039250 (234064)\n-515C04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+515A9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515A9D   Length              0005 (5)\n+515A9F   Flags               01 (1) 'Modification'\n+515AA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515AA4 CENTRAL HEADER #104   02014B50 (33639248)\n+515AA8 Created Zip Spec      14 (20) '2.0'\n+515AA9 Created OS            00 (0) 'MS-DOS'\n+515AAA Extract Zip Spec      14 (20) '2.0'\n+515AAB Extract OS            00 (0) 'MS-DOS'\n+515AAC General Purpose Flag  0000 (0)\n+515AAE Compression Method    0000 (0) 'Stored'\n+515AB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515AB4 CRC                   00000000 (0)\n+515AB8 Compressed Size       00000000 (0)\n+515ABC Uncompressed Size     00000000 (0)\n+515AC0 Filename Length       007A (122)\n+515AC2 Extra Length          0009 (9)\n+515AC4 Comment Length        0000 (0)\n+515AC6 Disk Start            0000 (0)\n+515AC8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515ACA Ext File Attributes   00000000 (0)\n+515ACE Local Header Offset   00039146 (233798)\n+515AD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515AD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515B4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515B4E   Length              0005 (5)\n+515B50   Flags               01 (1) 'Modification'\n+515B51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515B55 CENTRAL HEADER #105   02014B50 (33639248)\n+515B59 Created Zip Spec      14 (20) '2.0'\n+515B5A Created OS            00 (0) 'MS-DOS'\n+515B5B Extract Zip Spec      14 (20) '2.0'\n+515B5C Extract OS            00 (0) 'MS-DOS'\n+515B5D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+515B5F Compression Method    0000 (0) 'Stored'\n+515B61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515B65 CRC                   57267C45 (1462139973)\n+515B69 Compressed Size       000013D6 (5078)\n+515B6D Uncompressed Size     000013D6 (5078)\n+515B71 Filename Length       0090 (144)\n+515B73 Extra Length          0009 (9)\n+515B75 Comment Length        0000 (0)\n+515B77 Disk Start            0000 (0)\n+515B79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515B7B Ext File Attributes   00000000 (0)\n+515B7F Local Header Offset   000391E7 (233959)\n+515B83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x515C04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515B83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515C94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515C96   Length              0005 (5)\n-515C98   Flags               01 (1) 'Modification'\n-515C99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515C9D CENTRAL HEADER #106   02014B50 (33639248)\n-515CA1 Created Zip Spec      14 (20) '2.0'\n-515CA2 Created OS            00 (0) 'MS-DOS'\n-515CA3 Extract Zip Spec      14 (20) '2.0'\n-515CA4 Extract OS            00 (0) 'MS-DOS'\n-515CA5 General Purpose Flag  0000 (0)\n-515CA7 Compression Method    0000 (0) 'Stored'\n-515CA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515CAD CRC                   00000000 (0)\n-515CB1 Compressed Size       00000000 (0)\n-515CB5 Uncompressed Size     00000000 (0)\n-515CB9 Filename Length       0081 (129)\n-515CBB Extra Length          0009 (9)\n-515CBD Comment Length        0000 (0)\n-515CBF Disk Start            0000 (0)\n-515CC1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515CC3 Ext File Attributes   00000000 (0)\n-515CC7 Local Header Offset   0003A6ED (239341)\n-515CCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515CCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515D4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515D4E   Length              0005 (5)\n-515D50   Flags               01 (1) 'Modification'\n-515D51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515D55 CENTRAL HEADER #107   02014B50 (33639248)\n-515D59 Created Zip Spec      14 (20) '2.0'\n-515D5A Created OS            00 (0) 'MS-DOS'\n-515D5B Extract Zip Spec      14 (20) '2.0'\n-515D5C Extract OS            00 (0) 'MS-DOS'\n-515D5D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515D5F Compression Method    0000 (0) 'Stored'\n-515D61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515D65 CRC                   333FC2BB (859816635)\n-515D69 Compressed Size       00000736 (1846)\n-515D6D Uncompressed Size     00000736 (1846)\n-515D71 Filename Length       0097 (151)\n-515D73 Extra Length          0009 (9)\n-515D75 Comment Length        0000 (0)\n-515D77 Disk Start            0000 (0)\n-515D79 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515D7B Ext File Attributes   00000000 (0)\n-515D7F Local Header Offset   0003A795 (239509)\n-515D83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+515C13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515C15   Length              0005 (5)\n+515C17   Flags               01 (1) 'Modification'\n+515C18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515C1C CENTRAL HEADER #106   02014B50 (33639248)\n+515C20 Created Zip Spec      14 (20) '2.0'\n+515C21 Created OS            00 (0) 'MS-DOS'\n+515C22 Extract Zip Spec      14 (20) '2.0'\n+515C23 Extract OS            00 (0) 'MS-DOS'\n+515C24 General Purpose Flag  0000 (0)\n+515C26 Compression Method    0000 (0) 'Stored'\n+515C28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515C2C CRC                   00000000 (0)\n+515C30 Compressed Size       00000000 (0)\n+515C34 Uncompressed Size     00000000 (0)\n+515C38 Filename Length       0081 (129)\n+515C3A Extra Length          0009 (9)\n+515C3C Comment Length        0000 (0)\n+515C3E Disk Start            0000 (0)\n+515C40 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515C42 Ext File Attributes   00000000 (0)\n+515C46 Local Header Offset   0003A684 (239236)\n+515C4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515C4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515CCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515CCD   Length              0005 (5)\n+515CCF   Flags               01 (1) 'Modification'\n+515CD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515CD4 CENTRAL HEADER #107   02014B50 (33639248)\n+515CD8 Created Zip Spec      14 (20) '2.0'\n+515CD9 Created OS            00 (0) 'MS-DOS'\n+515CDA Extract Zip Spec      14 (20) '2.0'\n+515CDB Extract OS            00 (0) 'MS-DOS'\n+515CDC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+515CDE Compression Method    0000 (0) 'Stored'\n+515CE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515CE4 CRC                   333FC2BB (859816635)\n+515CE8 Compressed Size       00000736 (1846)\n+515CEC Uncompressed Size     00000736 (1846)\n+515CF0 Filename Length       0097 (151)\n+515CF2 Extra Length          0009 (9)\n+515CF4 Comment Length        0000 (0)\n+515CF6 Disk Start            0000 (0)\n+515CF8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515CFA Ext File Attributes   00000000 (0)\n+515CFE Local Header Offset   0003A72C (239404)\n+515D02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x515D83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x515D02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515E1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515E1C   Length              0005 (5)\n-515E1E   Flags               01 (1) 'Modification'\n-515E1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515E23 CENTRAL HEADER #108   02014B50 (33639248)\n-515E27 Created Zip Spec      14 (20) '2.0'\n-515E28 Created OS            00 (0) 'MS-DOS'\n-515E29 Extract Zip Spec      14 (20) '2.0'\n-515E2A Extract OS            00 (0) 'MS-DOS'\n-515E2B General Purpose Flag  0000 (0)\n-515E2D Compression Method    0000 (0) 'Stored'\n-515E2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515E33 CRC                   00000000 (0)\n-515E37 Compressed Size       00000000 (0)\n-515E3B Uncompressed Size     00000000 (0)\n-515E3F Filename Length       0024 (36)\n-515E41 Extra Length          0009 (9)\n-515E43 Comment Length        0000 (0)\n-515E45 Disk Start            0000 (0)\n-515E47 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515E49 Ext File Attributes   00000000 (0)\n-515E4D Local Header Offset   0003AF99 (241561)\n-515E51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515E51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515E75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515E77   Length              0005 (5)\n-515E79   Flags               01 (1) 'Modification'\n-515E7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515E7E CENTRAL HEADER #109   02014B50 (33639248)\n-515E82 Created Zip Spec      14 (20) '2.0'\n-515E83 Created OS            00 (0) 'MS-DOS'\n-515E84 Extract Zip Spec      14 (20) '2.0'\n-515E85 Extract OS            00 (0) 'MS-DOS'\n-515E86 General Purpose Flag  0000 (0)\n-515E88 Compression Method    0000 (0) 'Stored'\n-515E8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515E8E CRC                   00000000 (0)\n-515E92 Compressed Size       00000000 (0)\n-515E96 Uncompressed Size     00000000 (0)\n-515E9A Filename Length       002D (45)\n-515E9C Extra Length          0009 (9)\n-515E9E Comment Length        0000 (0)\n-515EA0 Disk Start            0000 (0)\n-515EA2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515EA4 Ext File Attributes   00000000 (0)\n-515EA8 Local Header Offset   0003AFE4 (241636)\n-515EAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515EAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515ED9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515EDB   Length              0005 (5)\n-515EDD   Flags               01 (1) 'Modification'\n-515EDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515EE2 CENTRAL HEADER #110   02014B50 (33639248)\n-515EE6 Created Zip Spec      14 (20) '2.0'\n-515EE7 Created OS            00 (0) 'MS-DOS'\n-515EE8 Extract Zip Spec      14 (20) '2.0'\n-515EE9 Extract OS            00 (0) 'MS-DOS'\n-515EEA General Purpose Flag  0000 (0)\n-515EEC Compression Method    0000 (0) 'Stored'\n-515EEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515EF2 CRC                   00000000 (0)\n-515EF6 Compressed Size       00000000 (0)\n-515EFA Uncompressed Size     00000000 (0)\n-515EFE Filename Length       005A (90)\n-515F00 Extra Length          0009 (9)\n-515F02 Comment Length        0000 (0)\n-515F04 Disk Start            0000 (0)\n-515F06 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515F08 Ext File Attributes   00000000 (0)\n-515F0C Local Header Offset   0003B038 (241720)\n-515F10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515F10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-515F6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-515F6C   Length              0005 (5)\n-515F6E   Flags               01 (1) 'Modification'\n-515F6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-515F73 CENTRAL HEADER #111   02014B50 (33639248)\n-515F77 Created Zip Spec      14 (20) '2.0'\n-515F78 Created OS            00 (0) 'MS-DOS'\n-515F79 Extract Zip Spec      14 (20) '2.0'\n-515F7A Extract OS            00 (0) 'MS-DOS'\n-515F7B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-515F7D Compression Method    0000 (0) 'Stored'\n-515F7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-515F83 CRC                   10CC5E74 (281828980)\n-515F87 Compressed Size       000009CD (2509)\n-515F8B Uncompressed Size     000009CD (2509)\n-515F8F Filename Length       0070 (112)\n-515F91 Extra Length          0009 (9)\n-515F93 Comment Length        0000 (0)\n-515F95 Disk Start            0000 (0)\n-515F97 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-515F99 Ext File Attributes   00000000 (0)\n-515F9D Local Header Offset   0003B0B9 (241849)\n-515FA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x515FA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516011 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516013   Length              0005 (5)\n-516015   Flags               01 (1) 'Modification'\n-516016   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51601A CENTRAL HEADER #112   02014B50 (33639248)\n-51601E Created Zip Spec      14 (20) '2.0'\n-51601F Created OS            00 (0) 'MS-DOS'\n-516020 Extract Zip Spec      14 (20) '2.0'\n-516021 Extract OS            00 (0) 'MS-DOS'\n-516022 General Purpose Flag  0000 (0)\n-516024 Compression Method    0000 (0) 'Stored'\n-516026 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51602A CRC                   00000000 (0)\n-51602E Compressed Size       00000000 (0)\n-516032 Uncompressed Size     00000000 (0)\n-516036 Filename Length       005A (90)\n-516038 Extra Length          0009 (9)\n-51603A Comment Length        0000 (0)\n-51603C Disk Start            0000 (0)\n-51603E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516040 Ext File Attributes   00000000 (0)\n-516044 Local Header Offset   0003BB2D (244525)\n-516048 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516048: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5160A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5160A4   Length              0005 (5)\n-5160A6   Flags               01 (1) 'Modification'\n-5160A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5160AB CENTRAL HEADER #113   02014B50 (33639248)\n-5160AF Created Zip Spec      14 (20) '2.0'\n-5160B0 Created OS            00 (0) 'MS-DOS'\n-5160B1 Extract Zip Spec      14 (20) '2.0'\n-5160B2 Extract OS            00 (0) 'MS-DOS'\n-5160B3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5160B5 Compression Method    0000 (0) 'Stored'\n-5160B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5160BB CRC                   5F6BF872 (1600911474)\n-5160BF Compressed Size       000009A0 (2464)\n-5160C3 Uncompressed Size     000009A0 (2464)\n-5160C7 Filename Length       0070 (112)\n-5160C9 Extra Length          0009 (9)\n-5160CB Comment Length        0000 (0)\n-5160CD Disk Start            0000 (0)\n-5160CF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5160D1 Ext File Attributes   00000000 (0)\n-5160D5 Local Header Offset   0003BBAE (244654)\n-5160D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5160D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516149 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51614B   Length              0005 (5)\n-51614D   Flags               01 (1) 'Modification'\n-51614E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516152 CENTRAL HEADER #114   02014B50 (33639248)\n-516156 Created Zip Spec      14 (20) '2.0'\n-516157 Created OS            00 (0) 'MS-DOS'\n-516158 Extract Zip Spec      14 (20) '2.0'\n-516159 Extract OS            00 (0) 'MS-DOS'\n-51615A General Purpose Flag  0000 (0)\n-51615C Compression Method    0000 (0) 'Stored'\n-51615E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516162 CRC                   00000000 (0)\n-516166 Compressed Size       00000000 (0)\n-51616A Uncompressed Size     00000000 (0)\n-51616E Filename Length       0023 (35)\n-516170 Extra Length          0009 (9)\n-516172 Comment Length        0000 (0)\n-516174 Disk Start            0000 (0)\n-516176 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516178 Ext File Attributes   00000000 (0)\n-51617C Local Header Offset   0003C5F5 (247285)\n-516180 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516180: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5161A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5161A5   Length              0005 (5)\n-5161A7   Flags               01 (1) 'Modification'\n-5161A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5161AC CENTRAL HEADER #115   02014B50 (33639248)\n-5161B0 Created Zip Spec      14 (20) '2.0'\n-5161B1 Created OS            00 (0) 'MS-DOS'\n-5161B2 Extract Zip Spec      14 (20) '2.0'\n-5161B3 Extract OS            00 (0) 'MS-DOS'\n-5161B4 General Purpose Flag  0000 (0)\n-5161B6 Compression Method    0000 (0) 'Stored'\n-5161B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5161BC CRC                   00000000 (0)\n-5161C0 Compressed Size       00000000 (0)\n-5161C4 Uncompressed Size     00000000 (0)\n-5161C8 Filename Length       002C (44)\n-5161CA Extra Length          0009 (9)\n-5161CC Comment Length        0000 (0)\n-5161CE Disk Start            0000 (0)\n-5161D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5161D2 Ext File Attributes   00000000 (0)\n-5161D6 Local Header Offset   0003C63F (247359)\n-5161DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5161DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516208   Length              0005 (5)\n-51620A   Flags               01 (1) 'Modification'\n-51620B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51620F CENTRAL HEADER #116   02014B50 (33639248)\n-516213 Created Zip Spec      14 (20) '2.0'\n-516214 Created OS            00 (0) 'MS-DOS'\n-516215 Extract Zip Spec      14 (20) '2.0'\n-516216 Extract OS            00 (0) 'MS-DOS'\n-516217 General Purpose Flag  0000 (0)\n-516219 Compression Method    0000 (0) 'Stored'\n-51621B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51621F CRC                   00000000 (0)\n-516223 Compressed Size       00000000 (0)\n-516227 Uncompressed Size     00000000 (0)\n-51622B Filename Length       0056 (86)\n-51622D Extra Length          0009 (9)\n-51622F Comment Length        0000 (0)\n-516231 Disk Start            0000 (0)\n-516233 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516235 Ext File Attributes   00000000 (0)\n-516239 Local Header Offset   0003C692 (247442)\n-51623D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51623D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516295   Length              0005 (5)\n-516297   Flags               01 (1) 'Modification'\n-516298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51629C CENTRAL HEADER #117   02014B50 (33639248)\n-5162A0 Created Zip Spec      14 (20) '2.0'\n-5162A1 Created OS            00 (0) 'MS-DOS'\n-5162A2 Extract Zip Spec      14 (20) '2.0'\n-5162A3 Extract OS            00 (0) 'MS-DOS'\n-5162A4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5162A6 Compression Method    0000 (0) 'Stored'\n-5162A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5162AC CRC                   456B0BC9 (1164643273)\n-5162B0 Compressed Size       00001135 (4405)\n-5162B4 Uncompressed Size     00001135 (4405)\n-5162B8 Filename Length       006C (108)\n-5162BA Extra Length          0009 (9)\n-5162BC Comment Length        0000 (0)\n-5162BE Disk Start            0000 (0)\n-5162C0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5162C2 Ext File Attributes   00000000 (0)\n-5162C6 Local Header Offset   0003C70F (247567)\n-5162CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5162CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516336 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516338   Length              0005 (5)\n-51633A   Flags               01 (1) 'Modification'\n-51633B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51633F CENTRAL HEADER #118   02014B50 (33639248)\n-516343 Created Zip Spec      14 (20) '2.0'\n-516344 Created OS            00 (0) 'MS-DOS'\n-516345 Extract Zip Spec      14 (20) '2.0'\n-516346 Extract OS            00 (0) 'MS-DOS'\n-516347 General Purpose Flag  0000 (0)\n-516349 Compression Method    0000 (0) 'Stored'\n-51634B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51634F CRC                   00000000 (0)\n-516353 Compressed Size       00000000 (0)\n-516357 Uncompressed Size     00000000 (0)\n-51635B Filename Length       0022 (34)\n-51635D Extra Length          0009 (9)\n-51635F Comment Length        0000 (0)\n-516361 Disk Start            0000 (0)\n-516363 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516365 Ext File Attributes   00000000 (0)\n-516369 Local Header Offset   0003D8E7 (252135)\n-51636D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51636D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51638F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516391   Length              0005 (5)\n-516393   Flags               01 (1) 'Modification'\n-516394   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516398 CENTRAL HEADER #119   02014B50 (33639248)\n-51639C Created Zip Spec      14 (20) '2.0'\n-51639D Created OS            00 (0) 'MS-DOS'\n-51639E Extract Zip Spec      14 (20) '2.0'\n-51639F Extract OS            00 (0) 'MS-DOS'\n-5163A0 General Purpose Flag  0000 (0)\n-5163A2 Compression Method    0000 (0) 'Stored'\n-5163A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5163A8 CRC                   00000000 (0)\n-5163AC Compressed Size       00000000 (0)\n-5163B0 Uncompressed Size     00000000 (0)\n-5163B4 Filename Length       002B (43)\n-5163B6 Extra Length          0009 (9)\n-5163B8 Comment Length        0000 (0)\n-5163BA Disk Start            0000 (0)\n-5163BC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5163BE Ext File Attributes   00000000 (0)\n-5163C2 Local Header Offset   0003D930 (252208)\n-5163C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5163C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5163F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5163F3   Length              0005 (5)\n-5163F5   Flags               01 (1) 'Modification'\n-5163F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5163FA CENTRAL HEADER #120   02014B50 (33639248)\n-5163FE Created Zip Spec      14 (20) '2.0'\n-5163FF Created OS            00 (0) 'MS-DOS'\n-516400 Extract Zip Spec      14 (20) '2.0'\n-516401 Extract OS            00 (0) 'MS-DOS'\n-516402 General Purpose Flag  0000 (0)\n-516404 Compression Method    0000 (0) 'Stored'\n-516406 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51640A CRC                   00000000 (0)\n-51640E Compressed Size       00000000 (0)\n-516412 Uncompressed Size     00000000 (0)\n-516416 Filename Length       005F (95)\n-516418 Extra Length          0009 (9)\n-51641A Comment Length        0000 (0)\n-51641C Disk Start            0000 (0)\n-51641E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516420 Ext File Attributes   00000000 (0)\n-516424 Local Header Offset   0003D982 (252290)\n-516428 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516428: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516487 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516489   Length              0005 (5)\n-51648B   Flags               01 (1) 'Modification'\n-51648C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516490 CENTRAL HEADER #121   02014B50 (33639248)\n-516494 Created Zip Spec      14 (20) '2.0'\n-516495 Created OS            00 (0) 'MS-DOS'\n-516496 Extract Zip Spec      14 (20) '2.0'\n-516497 Extract OS            00 (0) 'MS-DOS'\n-516498 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51649A Compression Method    0000 (0) 'Stored'\n-51649C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5164A0 CRC                   6A45582D (1782929453)\n-5164A4 Compressed Size       000009E0 (2528)\n-5164A8 Uncompressed Size     000009E0 (2528)\n-5164AC Filename Length       0075 (117)\n-5164AE Extra Length          0009 (9)\n-5164B0 Comment Length        0000 (0)\n-5164B2 Disk Start            0000 (0)\n-5164B4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5164B6 Ext File Attributes   00000000 (0)\n-5164BA Local Header Offset   0003DA08 (252424)\n-5164BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5164BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516533 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516535   Length              0005 (5)\n-516537   Flags               01 (1) 'Modification'\n-516538   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51653C CENTRAL HEADER #122   02014B50 (33639248)\n-516540 Created Zip Spec      14 (20) '2.0'\n-516541 Created OS            00 (0) 'MS-DOS'\n-516542 Extract Zip Spec      14 (20) '2.0'\n-516543 Extract OS            00 (0) 'MS-DOS'\n-516544 General Purpose Flag  0000 (0)\n-516546 Compression Method    0000 (0) 'Stored'\n-516548 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51654C CRC                   00000000 (0)\n-516550 Compressed Size       00000000 (0)\n-516554 Uncompressed Size     00000000 (0)\n-516558 Filename Length       0061 (97)\n-51655A Extra Length          0009 (9)\n-51655C Comment Length        0000 (0)\n-51655E Disk Start            0000 (0)\n-516560 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516562 Ext File Attributes   00000000 (0)\n-516566 Local Header Offset   0003E494 (255124)\n-51656A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51656A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5165CB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5165CD   Length              0005 (5)\n-5165CF   Flags               01 (1) 'Modification'\n-5165D0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5165D4 CENTRAL HEADER #123   02014B50 (33639248)\n-5165D8 Created Zip Spec      14 (20) '2.0'\n-5165D9 Created OS            00 (0) 'MS-DOS'\n-5165DA Extract Zip Spec      14 (20) '2.0'\n-5165DB Extract OS            00 (0) 'MS-DOS'\n-5165DC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5165DE Compression Method    0000 (0) 'Stored'\n-5165E0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5165E4 CRC                   4731534C (1194414924)\n-5165E8 Compressed Size       00000B90 (2960)\n-5165EC Uncompressed Size     00000B90 (2960)\n-5165F0 Filename Length       0077 (119)\n-5165F2 Extra Length          0009 (9)\n-5165F4 Comment Length        0000 (0)\n-5165F6 Disk Start            0000 (0)\n-5165F8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5165FA Ext File Attributes   00000000 (0)\n-5165FE Local Header Offset   0003E51C (255260)\n-516602 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516602: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516679 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51667B   Length              0005 (5)\n-51667D   Flags               01 (1) 'Modification'\n-51667E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516682 CENTRAL HEADER #124   02014B50 (33639248)\n-516686 Created Zip Spec      14 (20) '2.0'\n-516687 Created OS            00 (0) 'MS-DOS'\n-516688 Extract Zip Spec      14 (20) '2.0'\n-516689 Extract OS            00 (0) 'MS-DOS'\n-51668A General Purpose Flag  0000 (0)\n-51668C Compression Method    0000 (0) 'Stored'\n-51668E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516692 CRC                   00000000 (0)\n-516696 Compressed Size       00000000 (0)\n-51669A Uncompressed Size     00000000 (0)\n-51669E Filename Length       0060 (96)\n-5166A0 Extra Length          0009 (9)\n-5166A2 Comment Length        0000 (0)\n-5166A4 Disk Start            0000 (0)\n-5166A6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5166A8 Ext File Attributes   00000000 (0)\n-5166AC Local Header Offset   0003F15A (258394)\n-5166B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5166B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516710 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516712   Length              0005 (5)\n-516714   Flags               01 (1) 'Modification'\n-516715   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516719 CENTRAL HEADER #125   02014B50 (33639248)\n-51671D Created Zip Spec      14 (20) '2.0'\n-51671E Created OS            00 (0) 'MS-DOS'\n-51671F Extract Zip Spec      14 (20) '2.0'\n-516720 Extract OS            00 (0) 'MS-DOS'\n-516721 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516723 Compression Method    0000 (0) 'Stored'\n-516725 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516729 CRC                   CEBA8B64 (3468331876)\n-51672D Compressed Size       00000A7D (2685)\n-516731 Uncompressed Size     00000A7D (2685)\n-516735 Filename Length       0076 (118)\n-516737 Extra Length          0009 (9)\n-516739 Comment Length        0000 (0)\n-51673B Disk Start            0000 (0)\n-51673D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51673F Ext File Attributes   00000000 (0)\n-516743 Local Header Offset   0003F1E1 (258529)\n-516747 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516747: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5167BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5167BF   Length              0005 (5)\n-5167C1   Flags               01 (1) 'Modification'\n-5167C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5167C6 CENTRAL HEADER #126   02014B50 (33639248)\n-5167CA Created Zip Spec      14 (20) '2.0'\n-5167CB Created OS            00 (0) 'MS-DOS'\n-5167CC Extract Zip Spec      14 (20) '2.0'\n-5167CD Extract OS            00 (0) 'MS-DOS'\n-5167CE General Purpose Flag  0000 (0)\n-5167D0 Compression Method    0000 (0) 'Stored'\n-5167D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5167D6 CRC                   00000000 (0)\n-5167DA Compressed Size       00000000 (0)\n-5167DE Uncompressed Size     00000000 (0)\n-5167E2 Filename Length       005F (95)\n-5167E4 Extra Length          0009 (9)\n-5167E6 Comment Length        0000 (0)\n-5167E8 Disk Start            0000 (0)\n-5167EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5167EC Ext File Attributes   00000000 (0)\n-5167F0 Local Header Offset   0003FD0B (261387)\n-5167F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5167F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516853 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516855   Length              0005 (5)\n-516857   Flags               01 (1) 'Modification'\n-516858   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51685C CENTRAL HEADER #127   02014B50 (33639248)\n-516860 Created Zip Spec      14 (20) '2.0'\n-516861 Created OS            00 (0) 'MS-DOS'\n-516862 Extract Zip Spec      14 (20) '2.0'\n-516863 Extract OS            00 (0) 'MS-DOS'\n-516864 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516866 Compression Method    0000 (0) 'Stored'\n-516868 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51686C CRC                   0DACEA84 (229436036)\n-516870 Compressed Size       00000A95 (2709)\n-516874 Uncompressed Size     00000A95 (2709)\n-516878 Filename Length       0075 (117)\n-51687A Extra Length          0009 (9)\n-51687C Comment Length        0000 (0)\n-51687E Disk Start            0000 (0)\n-516880 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516882 Ext File Attributes   00000000 (0)\n-516886 Local Header Offset   0003FD91 (261521)\n-51688A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51688A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5168FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516901   Length              0005 (5)\n-516903   Flags               01 (1) 'Modification'\n-516904   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516908 CENTRAL HEADER #128   02014B50 (33639248)\n-51690C Created Zip Spec      14 (20) '2.0'\n-51690D Created OS            00 (0) 'MS-DOS'\n-51690E Extract Zip Spec      14 (20) '2.0'\n-51690F Extract OS            00 (0) 'MS-DOS'\n-516910 General Purpose Flag  0000 (0)\n-516912 Compression Method    0000 (0) 'Stored'\n-516914 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516918 CRC                   00000000 (0)\n-51691C Compressed Size       00000000 (0)\n-516920 Uncompressed Size     00000000 (0)\n-516924 Filename Length       0060 (96)\n-516926 Extra Length          0009 (9)\n-516928 Comment Length        0000 (0)\n-51692A Disk Start            0000 (0)\n-51692C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51692E Ext File Attributes   00000000 (0)\n-516932 Local Header Offset   000408D2 (264402)\n-516936 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516936: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516996 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516998   Length              0005 (5)\n-51699A   Flags               01 (1) 'Modification'\n-51699B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51699F CENTRAL HEADER #129   02014B50 (33639248)\n-5169A3 Created Zip Spec      14 (20) '2.0'\n-5169A4 Created OS            00 (0) 'MS-DOS'\n-5169A5 Extract Zip Spec      14 (20) '2.0'\n-5169A6 Extract OS            00 (0) 'MS-DOS'\n-5169A7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5169A9 Compression Method    0000 (0) 'Stored'\n-5169AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5169AF CRC                   2E84B239 (780448313)\n-5169B3 Compressed Size       0000121D (4637)\n-5169B7 Uncompressed Size     0000121D (4637)\n-5169BB Filename Length       0076 (118)\n-5169BD Extra Length          0009 (9)\n-5169BF Comment Length        0000 (0)\n-5169C1 Disk Start            0000 (0)\n-5169C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5169C5 Ext File Attributes   00000000 (0)\n-5169C9 Local Header Offset   00040959 (264537)\n-5169CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5169CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516A43 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516A45   Length              0005 (5)\n-516A47   Flags               01 (1) 'Modification'\n-516A48   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516A4C CENTRAL HEADER #130   02014B50 (33639248)\n-516A50 Created Zip Spec      14 (20) '2.0'\n-516A51 Created OS            00 (0) 'MS-DOS'\n-516A52 Extract Zip Spec      14 (20) '2.0'\n-516A53 Extract OS            00 (0) 'MS-DOS'\n-516A54 General Purpose Flag  0000 (0)\n-516A56 Compression Method    0000 (0) 'Stored'\n-516A58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516A5C CRC                   00000000 (0)\n-516A60 Compressed Size       00000000 (0)\n-516A64 Uncompressed Size     00000000 (0)\n-516A68 Filename Length       007A (122)\n-516A6A Extra Length          0009 (9)\n-516A6C Comment Length        0000 (0)\n-516A6E Disk Start            0000 (0)\n-516A70 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516A72 Ext File Attributes   00000000 (0)\n-516A76 Local Header Offset   00041C23 (269347)\n-516A7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516A7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516AF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516AF6   Length              0005 (5)\n-516AF8   Flags               01 (1) 'Modification'\n-516AF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516AFD CENTRAL HEADER #131   02014B50 (33639248)\n-516B01 Created Zip Spec      14 (20) '2.0'\n-516B02 Created OS            00 (0) 'MS-DOS'\n-516B03 Extract Zip Spec      14 (20) '2.0'\n-516B04 Extract OS            00 (0) 'MS-DOS'\n-516B05 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516B07 Compression Method    0000 (0) 'Stored'\n-516B09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516B0D CRC                   10E7267F (283584127)\n-516B11 Compressed Size       000006FB (1787)\n-516B15 Uncompressed Size     000006FB (1787)\n-516B19 Filename Length       0090 (144)\n-516B1B Extra Length          0009 (9)\n-516B1D Comment Length        0000 (0)\n-516B1F Disk Start            0000 (0)\n-516B21 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516B23 Ext File Attributes   00000000 (0)\n-516B27 Local Header Offset   00041CC4 (269508)\n-516B2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+515D99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515D9B   Length              0005 (5)\n+515D9D   Flags               01 (1) 'Modification'\n+515D9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515DA2 CENTRAL HEADER #108   02014B50 (33639248)\n+515DA6 Created Zip Spec      14 (20) '2.0'\n+515DA7 Created OS            00 (0) 'MS-DOS'\n+515DA8 Extract Zip Spec      14 (20) '2.0'\n+515DA9 Extract OS            00 (0) 'MS-DOS'\n+515DAA General Purpose Flag  0000 (0)\n+515DAC Compression Method    0000 (0) 'Stored'\n+515DAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515DB2 CRC                   00000000 (0)\n+515DB6 Compressed Size       00000000 (0)\n+515DBA Uncompressed Size     00000000 (0)\n+515DBE Filename Length       0024 (36)\n+515DC0 Extra Length          0009 (9)\n+515DC2 Comment Length        0000 (0)\n+515DC4 Disk Start            0000 (0)\n+515DC6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515DC8 Ext File Attributes   00000000 (0)\n+515DCC Local Header Offset   0003AF30 (241456)\n+515DD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515DD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515DF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515DF6   Length              0005 (5)\n+515DF8   Flags               01 (1) 'Modification'\n+515DF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515DFD CENTRAL HEADER #109   02014B50 (33639248)\n+515E01 Created Zip Spec      14 (20) '2.0'\n+515E02 Created OS            00 (0) 'MS-DOS'\n+515E03 Extract Zip Spec      14 (20) '2.0'\n+515E04 Extract OS            00 (0) 'MS-DOS'\n+515E05 General Purpose Flag  0000 (0)\n+515E07 Compression Method    0000 (0) 'Stored'\n+515E09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515E0D CRC                   00000000 (0)\n+515E11 Compressed Size       00000000 (0)\n+515E15 Uncompressed Size     00000000 (0)\n+515E19 Filename Length       002D (45)\n+515E1B Extra Length          0009 (9)\n+515E1D Comment Length        0000 (0)\n+515E1F Disk Start            0000 (0)\n+515E21 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515E23 Ext File Attributes   00000000 (0)\n+515E27 Local Header Offset   0003AF7B (241531)\n+515E2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515E2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515E58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515E5A   Length              0005 (5)\n+515E5C   Flags               01 (1) 'Modification'\n+515E5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515E61 CENTRAL HEADER #110   02014B50 (33639248)\n+515E65 Created Zip Spec      14 (20) '2.0'\n+515E66 Created OS            00 (0) 'MS-DOS'\n+515E67 Extract Zip Spec      14 (20) '2.0'\n+515E68 Extract OS            00 (0) 'MS-DOS'\n+515E69 General Purpose Flag  0000 (0)\n+515E6B Compression Method    0000 (0) 'Stored'\n+515E6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515E71 CRC                   00000000 (0)\n+515E75 Compressed Size       00000000 (0)\n+515E79 Uncompressed Size     00000000 (0)\n+515E7D Filename Length       005A (90)\n+515E7F Extra Length          0009 (9)\n+515E81 Comment Length        0000 (0)\n+515E83 Disk Start            0000 (0)\n+515E85 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515E87 Ext File Attributes   00000000 (0)\n+515E8B Local Header Offset   0003AFCF (241615)\n+515E8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515E8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515EE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515EEB   Length              0005 (5)\n+515EED   Flags               01 (1) 'Modification'\n+515EEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515EF2 CENTRAL HEADER #111   02014B50 (33639248)\n+515EF6 Created Zip Spec      14 (20) '2.0'\n+515EF7 Created OS            00 (0) 'MS-DOS'\n+515EF8 Extract Zip Spec      14 (20) '2.0'\n+515EF9 Extract OS            00 (0) 'MS-DOS'\n+515EFA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+515EFC Compression Method    0000 (0) 'Stored'\n+515EFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515F02 CRC                   10CC5E74 (281828980)\n+515F06 Compressed Size       000009CD (2509)\n+515F0A Uncompressed Size     000009CD (2509)\n+515F0E Filename Length       0070 (112)\n+515F10 Extra Length          0009 (9)\n+515F12 Comment Length        0000 (0)\n+515F14 Disk Start            0000 (0)\n+515F16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515F18 Ext File Attributes   00000000 (0)\n+515F1C Local Header Offset   0003B050 (241744)\n+515F20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515F20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+515F90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+515F92   Length              0005 (5)\n+515F94   Flags               01 (1) 'Modification'\n+515F95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+515F99 CENTRAL HEADER #112   02014B50 (33639248)\n+515F9D Created Zip Spec      14 (20) '2.0'\n+515F9E Created OS            00 (0) 'MS-DOS'\n+515F9F Extract Zip Spec      14 (20) '2.0'\n+515FA0 Extract OS            00 (0) 'MS-DOS'\n+515FA1 General Purpose Flag  0000 (0)\n+515FA3 Compression Method    0000 (0) 'Stored'\n+515FA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+515FA9 CRC                   00000000 (0)\n+515FAD Compressed Size       00000000 (0)\n+515FB1 Uncompressed Size     00000000 (0)\n+515FB5 Filename Length       005A (90)\n+515FB7 Extra Length          0009 (9)\n+515FB9 Comment Length        0000 (0)\n+515FBB Disk Start            0000 (0)\n+515FBD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+515FBF Ext File Attributes   00000000 (0)\n+515FC3 Local Header Offset   0003BAC4 (244420)\n+515FC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x515FC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516023   Length              0005 (5)\n+516025   Flags               01 (1) 'Modification'\n+516026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51602A CENTRAL HEADER #113   02014B50 (33639248)\n+51602E Created Zip Spec      14 (20) '2.0'\n+51602F Created OS            00 (0) 'MS-DOS'\n+516030 Extract Zip Spec      14 (20) '2.0'\n+516031 Extract OS            00 (0) 'MS-DOS'\n+516032 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516034 Compression Method    0000 (0) 'Stored'\n+516036 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51603A CRC                   5F6BF872 (1600911474)\n+51603E Compressed Size       000009A0 (2464)\n+516042 Uncompressed Size     000009A0 (2464)\n+516046 Filename Length       0070 (112)\n+516048 Extra Length          0009 (9)\n+51604A Comment Length        0000 (0)\n+51604C Disk Start            0000 (0)\n+51604E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516050 Ext File Attributes   00000000 (0)\n+516054 Local Header Offset   0003BB45 (244549)\n+516058 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516058: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5160C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5160CA   Length              0005 (5)\n+5160CC   Flags               01 (1) 'Modification'\n+5160CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5160D1 CENTRAL HEADER #114   02014B50 (33639248)\n+5160D5 Created Zip Spec      14 (20) '2.0'\n+5160D6 Created OS            00 (0) 'MS-DOS'\n+5160D7 Extract Zip Spec      14 (20) '2.0'\n+5160D8 Extract OS            00 (0) 'MS-DOS'\n+5160D9 General Purpose Flag  0000 (0)\n+5160DB Compression Method    0000 (0) 'Stored'\n+5160DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5160E1 CRC                   00000000 (0)\n+5160E5 Compressed Size       00000000 (0)\n+5160E9 Uncompressed Size     00000000 (0)\n+5160ED Filename Length       0023 (35)\n+5160EF Extra Length          0009 (9)\n+5160F1 Comment Length        0000 (0)\n+5160F3 Disk Start            0000 (0)\n+5160F5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5160F7 Ext File Attributes   00000000 (0)\n+5160FB Local Header Offset   0003C58C (247180)\n+5160FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5160FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516122 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516124   Length              0005 (5)\n+516126   Flags               01 (1) 'Modification'\n+516127   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51612B CENTRAL HEADER #115   02014B50 (33639248)\n+51612F Created Zip Spec      14 (20) '2.0'\n+516130 Created OS            00 (0) 'MS-DOS'\n+516131 Extract Zip Spec      14 (20) '2.0'\n+516132 Extract OS            00 (0) 'MS-DOS'\n+516133 General Purpose Flag  0000 (0)\n+516135 Compression Method    0000 (0) 'Stored'\n+516137 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51613B CRC                   00000000 (0)\n+51613F Compressed Size       00000000 (0)\n+516143 Uncompressed Size     00000000 (0)\n+516147 Filename Length       002C (44)\n+516149 Extra Length          0009 (9)\n+51614B Comment Length        0000 (0)\n+51614D Disk Start            0000 (0)\n+51614F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516151 Ext File Attributes   00000000 (0)\n+516155 Local Header Offset   0003C5D6 (247254)\n+516159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516187   Length              0005 (5)\n+516189   Flags               01 (1) 'Modification'\n+51618A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51618E CENTRAL HEADER #116   02014B50 (33639248)\n+516192 Created Zip Spec      14 (20) '2.0'\n+516193 Created OS            00 (0) 'MS-DOS'\n+516194 Extract Zip Spec      14 (20) '2.0'\n+516195 Extract OS            00 (0) 'MS-DOS'\n+516196 General Purpose Flag  0000 (0)\n+516198 Compression Method    0000 (0) 'Stored'\n+51619A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51619E CRC                   00000000 (0)\n+5161A2 Compressed Size       00000000 (0)\n+5161A6 Uncompressed Size     00000000 (0)\n+5161AA Filename Length       0056 (86)\n+5161AC Extra Length          0009 (9)\n+5161AE Comment Length        0000 (0)\n+5161B0 Disk Start            0000 (0)\n+5161B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5161B4 Ext File Attributes   00000000 (0)\n+5161B8 Local Header Offset   0003C629 (247337)\n+5161BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5161BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516212 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516214   Length              0005 (5)\n+516216   Flags               01 (1) 'Modification'\n+516217   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51621B CENTRAL HEADER #117   02014B50 (33639248)\n+51621F Created Zip Spec      14 (20) '2.0'\n+516220 Created OS            00 (0) 'MS-DOS'\n+516221 Extract Zip Spec      14 (20) '2.0'\n+516222 Extract OS            00 (0) 'MS-DOS'\n+516223 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516225 Compression Method    0000 (0) 'Stored'\n+516227 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51622B CRC                   456B0BC9 (1164643273)\n+51622F Compressed Size       00001135 (4405)\n+516233 Uncompressed Size     00001135 (4405)\n+516237 Filename Length       006C (108)\n+516239 Extra Length          0009 (9)\n+51623B Comment Length        0000 (0)\n+51623D Disk Start            0000 (0)\n+51623F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516241 Ext File Attributes   00000000 (0)\n+516245 Local Header Offset   0003C6A6 (247462)\n+516249 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516249: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5162B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5162B7   Length              0005 (5)\n+5162B9   Flags               01 (1) 'Modification'\n+5162BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5162BE CENTRAL HEADER #118   02014B50 (33639248)\n+5162C2 Created Zip Spec      14 (20) '2.0'\n+5162C3 Created OS            00 (0) 'MS-DOS'\n+5162C4 Extract Zip Spec      14 (20) '2.0'\n+5162C5 Extract OS            00 (0) 'MS-DOS'\n+5162C6 General Purpose Flag  0000 (0)\n+5162C8 Compression Method    0000 (0) 'Stored'\n+5162CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5162CE CRC                   00000000 (0)\n+5162D2 Compressed Size       00000000 (0)\n+5162D6 Uncompressed Size     00000000 (0)\n+5162DA Filename Length       0022 (34)\n+5162DC Extra Length          0009 (9)\n+5162DE Comment Length        0000 (0)\n+5162E0 Disk Start            0000 (0)\n+5162E2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5162E4 Ext File Attributes   00000000 (0)\n+5162E8 Local Header Offset   0003D87E (252030)\n+5162EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5162EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51630E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516310   Length              0005 (5)\n+516312   Flags               01 (1) 'Modification'\n+516313   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516317 CENTRAL HEADER #119   02014B50 (33639248)\n+51631B Created Zip Spec      14 (20) '2.0'\n+51631C Created OS            00 (0) 'MS-DOS'\n+51631D Extract Zip Spec      14 (20) '2.0'\n+51631E Extract OS            00 (0) 'MS-DOS'\n+51631F General Purpose Flag  0000 (0)\n+516321 Compression Method    0000 (0) 'Stored'\n+516323 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516327 CRC                   00000000 (0)\n+51632B Compressed Size       00000000 (0)\n+51632F Uncompressed Size     00000000 (0)\n+516333 Filename Length       002B (43)\n+516335 Extra Length          0009 (9)\n+516337 Comment Length        0000 (0)\n+516339 Disk Start            0000 (0)\n+51633B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51633D Ext File Attributes   00000000 (0)\n+516341 Local Header Offset   0003D8C7 (252103)\n+516345 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516345: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516370 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516372   Length              0005 (5)\n+516374   Flags               01 (1) 'Modification'\n+516375   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516379 CENTRAL HEADER #120   02014B50 (33639248)\n+51637D Created Zip Spec      14 (20) '2.0'\n+51637E Created OS            00 (0) 'MS-DOS'\n+51637F Extract Zip Spec      14 (20) '2.0'\n+516380 Extract OS            00 (0) 'MS-DOS'\n+516381 General Purpose Flag  0000 (0)\n+516383 Compression Method    0000 (0) 'Stored'\n+516385 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516389 CRC                   00000000 (0)\n+51638D Compressed Size       00000000 (0)\n+516391 Uncompressed Size     00000000 (0)\n+516395 Filename Length       005F (95)\n+516397 Extra Length          0009 (9)\n+516399 Comment Length        0000 (0)\n+51639B Disk Start            0000 (0)\n+51639D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51639F Ext File Attributes   00000000 (0)\n+5163A3 Local Header Offset   0003D919 (252185)\n+5163A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5163A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516406 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516408   Length              0005 (5)\n+51640A   Flags               01 (1) 'Modification'\n+51640B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51640F CENTRAL HEADER #121   02014B50 (33639248)\n+516413 Created Zip Spec      14 (20) '2.0'\n+516414 Created OS            00 (0) 'MS-DOS'\n+516415 Extract Zip Spec      14 (20) '2.0'\n+516416 Extract OS            00 (0) 'MS-DOS'\n+516417 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516419 Compression Method    0000 (0) 'Stored'\n+51641B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51641F CRC                   6A45582D (1782929453)\n+516423 Compressed Size       000009E0 (2528)\n+516427 Uncompressed Size     000009E0 (2528)\n+51642B Filename Length       0075 (117)\n+51642D Extra Length          0009 (9)\n+51642F Comment Length        0000 (0)\n+516431 Disk Start            0000 (0)\n+516433 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516435 Ext File Attributes   00000000 (0)\n+516439 Local Header Offset   0003D99F (252319)\n+51643D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51643D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5164B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5164B4   Length              0005 (5)\n+5164B6   Flags               01 (1) 'Modification'\n+5164B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5164BB CENTRAL HEADER #122   02014B50 (33639248)\n+5164BF Created Zip Spec      14 (20) '2.0'\n+5164C0 Created OS            00 (0) 'MS-DOS'\n+5164C1 Extract Zip Spec      14 (20) '2.0'\n+5164C2 Extract OS            00 (0) 'MS-DOS'\n+5164C3 General Purpose Flag  0000 (0)\n+5164C5 Compression Method    0000 (0) 'Stored'\n+5164C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5164CB CRC                   00000000 (0)\n+5164CF Compressed Size       00000000 (0)\n+5164D3 Uncompressed Size     00000000 (0)\n+5164D7 Filename Length       0061 (97)\n+5164D9 Extra Length          0009 (9)\n+5164DB Comment Length        0000 (0)\n+5164DD Disk Start            0000 (0)\n+5164DF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5164E1 Ext File Attributes   00000000 (0)\n+5164E5 Local Header Offset   0003E42B (255019)\n+5164E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5164E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51654A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51654C   Length              0005 (5)\n+51654E   Flags               01 (1) 'Modification'\n+51654F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516553 CENTRAL HEADER #123   02014B50 (33639248)\n+516557 Created Zip Spec      14 (20) '2.0'\n+516558 Created OS            00 (0) 'MS-DOS'\n+516559 Extract Zip Spec      14 (20) '2.0'\n+51655A Extract OS            00 (0) 'MS-DOS'\n+51655B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51655D Compression Method    0000 (0) 'Stored'\n+51655F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516563 CRC                   4731534C (1194414924)\n+516567 Compressed Size       00000B90 (2960)\n+51656B Uncompressed Size     00000B90 (2960)\n+51656F Filename Length       0077 (119)\n+516571 Extra Length          0009 (9)\n+516573 Comment Length        0000 (0)\n+516575 Disk Start            0000 (0)\n+516577 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516579 Ext File Attributes   00000000 (0)\n+51657D Local Header Offset   0003E4B3 (255155)\n+516581 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516581: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5165F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5165FA   Length              0005 (5)\n+5165FC   Flags               01 (1) 'Modification'\n+5165FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516601 CENTRAL HEADER #124   02014B50 (33639248)\n+516605 Created Zip Spec      14 (20) '2.0'\n+516606 Created OS            00 (0) 'MS-DOS'\n+516607 Extract Zip Spec      14 (20) '2.0'\n+516608 Extract OS            00 (0) 'MS-DOS'\n+516609 General Purpose Flag  0000 (0)\n+51660B Compression Method    0000 (0) 'Stored'\n+51660D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516611 CRC                   00000000 (0)\n+516615 Compressed Size       00000000 (0)\n+516619 Uncompressed Size     00000000 (0)\n+51661D Filename Length       0060 (96)\n+51661F Extra Length          0009 (9)\n+516621 Comment Length        0000 (0)\n+516623 Disk Start            0000 (0)\n+516625 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516627 Ext File Attributes   00000000 (0)\n+51662B Local Header Offset   0003F0F1 (258289)\n+51662F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51662F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51668F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516691   Length              0005 (5)\n+516693   Flags               01 (1) 'Modification'\n+516694   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516698 CENTRAL HEADER #125   02014B50 (33639248)\n+51669C Created Zip Spec      14 (20) '2.0'\n+51669D Created OS            00 (0) 'MS-DOS'\n+51669E Extract Zip Spec      14 (20) '2.0'\n+51669F Extract OS            00 (0) 'MS-DOS'\n+5166A0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5166A2 Compression Method    0000 (0) 'Stored'\n+5166A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5166A8 CRC                   CEBA8B64 (3468331876)\n+5166AC Compressed Size       00000A7D (2685)\n+5166B0 Uncompressed Size     00000A7D (2685)\n+5166B4 Filename Length       0076 (118)\n+5166B6 Extra Length          0009 (9)\n+5166B8 Comment Length        0000 (0)\n+5166BA Disk Start            0000 (0)\n+5166BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5166BE Ext File Attributes   00000000 (0)\n+5166C2 Local Header Offset   0003F178 (258424)\n+5166C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5166C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51673C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51673E   Length              0005 (5)\n+516740   Flags               01 (1) 'Modification'\n+516741   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516745 CENTRAL HEADER #126   02014B50 (33639248)\n+516749 Created Zip Spec      14 (20) '2.0'\n+51674A Created OS            00 (0) 'MS-DOS'\n+51674B Extract Zip Spec      14 (20) '2.0'\n+51674C Extract OS            00 (0) 'MS-DOS'\n+51674D General Purpose Flag  0000 (0)\n+51674F Compression Method    0000 (0) 'Stored'\n+516751 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516755 CRC                   00000000 (0)\n+516759 Compressed Size       00000000 (0)\n+51675D Uncompressed Size     00000000 (0)\n+516761 Filename Length       005F (95)\n+516763 Extra Length          0009 (9)\n+516765 Comment Length        0000 (0)\n+516767 Disk Start            0000 (0)\n+516769 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51676B Ext File Attributes   00000000 (0)\n+51676F Local Header Offset   0003FCA2 (261282)\n+516773 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516773: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5167D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5167D4   Length              0005 (5)\n+5167D6   Flags               01 (1) 'Modification'\n+5167D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5167DB CENTRAL HEADER #127   02014B50 (33639248)\n+5167DF Created Zip Spec      14 (20) '2.0'\n+5167E0 Created OS            00 (0) 'MS-DOS'\n+5167E1 Extract Zip Spec      14 (20) '2.0'\n+5167E2 Extract OS            00 (0) 'MS-DOS'\n+5167E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5167E5 Compression Method    0000 (0) 'Stored'\n+5167E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5167EB CRC                   0DACEA84 (229436036)\n+5167EF Compressed Size       00000A95 (2709)\n+5167F3 Uncompressed Size     00000A95 (2709)\n+5167F7 Filename Length       0075 (117)\n+5167F9 Extra Length          0009 (9)\n+5167FB Comment Length        0000 (0)\n+5167FD Disk Start            0000 (0)\n+5167FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516801 Ext File Attributes   00000000 (0)\n+516805 Local Header Offset   0003FD28 (261416)\n+516809 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516809: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51687E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516880   Length              0005 (5)\n+516882   Flags               01 (1) 'Modification'\n+516883   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516887 CENTRAL HEADER #128   02014B50 (33639248)\n+51688B Created Zip Spec      14 (20) '2.0'\n+51688C Created OS            00 (0) 'MS-DOS'\n+51688D Extract Zip Spec      14 (20) '2.0'\n+51688E Extract OS            00 (0) 'MS-DOS'\n+51688F General Purpose Flag  0000 (0)\n+516891 Compression Method    0000 (0) 'Stored'\n+516893 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516897 CRC                   00000000 (0)\n+51689B Compressed Size       00000000 (0)\n+51689F Uncompressed Size     00000000 (0)\n+5168A3 Filename Length       0060 (96)\n+5168A5 Extra Length          0009 (9)\n+5168A7 Comment Length        0000 (0)\n+5168A9 Disk Start            0000 (0)\n+5168AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5168AD Ext File Attributes   00000000 (0)\n+5168B1 Local Header Offset   00040869 (264297)\n+5168B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5168B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516915 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516917   Length              0005 (5)\n+516919   Flags               01 (1) 'Modification'\n+51691A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51691E CENTRAL HEADER #129   02014B50 (33639248)\n+516922 Created Zip Spec      14 (20) '2.0'\n+516923 Created OS            00 (0) 'MS-DOS'\n+516924 Extract Zip Spec      14 (20) '2.0'\n+516925 Extract OS            00 (0) 'MS-DOS'\n+516926 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516928 Compression Method    0000 (0) 'Stored'\n+51692A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51692E CRC                   2E84B239 (780448313)\n+516932 Compressed Size       0000121D (4637)\n+516936 Uncompressed Size     0000121D (4637)\n+51693A Filename Length       0076 (118)\n+51693C Extra Length          0009 (9)\n+51693E Comment Length        0000 (0)\n+516940 Disk Start            0000 (0)\n+516942 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516944 Ext File Attributes   00000000 (0)\n+516948 Local Header Offset   000408F0 (264432)\n+51694C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51694C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5169C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5169C4   Length              0005 (5)\n+5169C6   Flags               01 (1) 'Modification'\n+5169C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5169CB CENTRAL HEADER #130   02014B50 (33639248)\n+5169CF Created Zip Spec      14 (20) '2.0'\n+5169D0 Created OS            00 (0) 'MS-DOS'\n+5169D1 Extract Zip Spec      14 (20) '2.0'\n+5169D2 Extract OS            00 (0) 'MS-DOS'\n+5169D3 General Purpose Flag  0000 (0)\n+5169D5 Compression Method    0000 (0) 'Stored'\n+5169D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5169DB CRC                   00000000 (0)\n+5169DF Compressed Size       00000000 (0)\n+5169E3 Uncompressed Size     00000000 (0)\n+5169E7 Filename Length       007A (122)\n+5169E9 Extra Length          0009 (9)\n+5169EB Comment Length        0000 (0)\n+5169ED Disk Start            0000 (0)\n+5169EF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5169F1 Ext File Attributes   00000000 (0)\n+5169F5 Local Header Offset   00041BBA (269242)\n+5169F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5169F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516A73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516A75   Length              0005 (5)\n+516A77   Flags               01 (1) 'Modification'\n+516A78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516A7C CENTRAL HEADER #131   02014B50 (33639248)\n+516A80 Created Zip Spec      14 (20) '2.0'\n+516A81 Created OS            00 (0) 'MS-DOS'\n+516A82 Extract Zip Spec      14 (20) '2.0'\n+516A83 Extract OS            00 (0) 'MS-DOS'\n+516A84 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516A86 Compression Method    0000 (0) 'Stored'\n+516A88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516A8C CRC                   10E7267F (283584127)\n+516A90 Compressed Size       000006FB (1787)\n+516A94 Uncompressed Size     000006FB (1787)\n+516A98 Filename Length       0090 (144)\n+516A9A Extra Length          0009 (9)\n+516A9C Comment Length        0000 (0)\n+516A9E Disk Start            0000 (0)\n+516AA0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516AA2 Ext File Attributes   00000000 (0)\n+516AA6 Local Header Offset   00041C5B (269403)\n+516AAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x516B2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x516AAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-516BBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516BBD   Length              0005 (5)\n-516BBF   Flags               01 (1) 'Modification'\n-516BC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516BC4 CENTRAL HEADER #132   02014B50 (33639248)\n-516BC8 Created Zip Spec      14 (20) '2.0'\n-516BC9 Created OS            00 (0) 'MS-DOS'\n-516BCA Extract Zip Spec      14 (20) '2.0'\n-516BCB Extract OS            00 (0) 'MS-DOS'\n-516BCC General Purpose Flag  0000 (0)\n-516BCE Compression Method    0000 (0) 'Stored'\n-516BD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516BD4 CRC                   00000000 (0)\n-516BD8 Compressed Size       00000000 (0)\n-516BDC Uncompressed Size     00000000 (0)\n-516BE0 Filename Length       007B (123)\n-516BE2 Extra Length          0009 (9)\n-516BE4 Comment Length        0000 (0)\n-516BE6 Disk Start            0000 (0)\n-516BE8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516BEA Ext File Attributes   00000000 (0)\n-516BEE Local Header Offset   00042486 (271494)\n-516BF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516BF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516C6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516C6F   Length              0005 (5)\n-516C71   Flags               01 (1) 'Modification'\n-516C72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516C76 CENTRAL HEADER #133   02014B50 (33639248)\n-516C7A Created Zip Spec      14 (20) '2.0'\n-516C7B Created OS            00 (0) 'MS-DOS'\n-516C7C Extract Zip Spec      14 (20) '2.0'\n-516C7D Extract OS            00 (0) 'MS-DOS'\n-516C7E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516C80 Compression Method    0000 (0) 'Stored'\n-516C82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516C86 CRC                   24E47A3B (618953275)\n-516C8A Compressed Size       000006FF (1791)\n-516C8E Uncompressed Size     000006FF (1791)\n-516C92 Filename Length       0091 (145)\n-516C94 Extra Length          0009 (9)\n-516C96 Comment Length        0000 (0)\n-516C98 Disk Start            0000 (0)\n-516C9A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516C9C Ext File Attributes   00000000 (0)\n-516CA0 Local Header Offset   00042528 (271656)\n-516CA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+516B3A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516B3C   Length              0005 (5)\n+516B3E   Flags               01 (1) 'Modification'\n+516B3F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516B43 CENTRAL HEADER #132   02014B50 (33639248)\n+516B47 Created Zip Spec      14 (20) '2.0'\n+516B48 Created OS            00 (0) 'MS-DOS'\n+516B49 Extract Zip Spec      14 (20) '2.0'\n+516B4A Extract OS            00 (0) 'MS-DOS'\n+516B4B General Purpose Flag  0000 (0)\n+516B4D Compression Method    0000 (0) 'Stored'\n+516B4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516B53 CRC                   00000000 (0)\n+516B57 Compressed Size       00000000 (0)\n+516B5B Uncompressed Size     00000000 (0)\n+516B5F Filename Length       007B (123)\n+516B61 Extra Length          0009 (9)\n+516B63 Comment Length        0000 (0)\n+516B65 Disk Start            0000 (0)\n+516B67 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516B69 Ext File Attributes   00000000 (0)\n+516B6D Local Header Offset   0004241D (271389)\n+516B71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516B71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516BEC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516BEE   Length              0005 (5)\n+516BF0   Flags               01 (1) 'Modification'\n+516BF1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516BF5 CENTRAL HEADER #133   02014B50 (33639248)\n+516BF9 Created Zip Spec      14 (20) '2.0'\n+516BFA Created OS            00 (0) 'MS-DOS'\n+516BFB Extract Zip Spec      14 (20) '2.0'\n+516BFC Extract OS            00 (0) 'MS-DOS'\n+516BFD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516BFF Compression Method    0000 (0) 'Stored'\n+516C01 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516C05 CRC                   24E47A3B (618953275)\n+516C09 Compressed Size       000006FF (1791)\n+516C0D Uncompressed Size     000006FF (1791)\n+516C11 Filename Length       0091 (145)\n+516C13 Extra Length          0009 (9)\n+516C15 Comment Length        0000 (0)\n+516C17 Disk Start            0000 (0)\n+516C19 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516C1B Ext File Attributes   00000000 (0)\n+516C1F Local Header Offset   000424BF (271551)\n+516C23 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x516CA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x516C23: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-516D35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516D37   Length              0005 (5)\n-516D39   Flags               01 (1) 'Modification'\n-516D3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516D3E CENTRAL HEADER #134   02014B50 (33639248)\n-516D42 Created Zip Spec      14 (20) '2.0'\n-516D43 Created OS            00 (0) 'MS-DOS'\n-516D44 Extract Zip Spec      14 (20) '2.0'\n-516D45 Extract OS            00 (0) 'MS-DOS'\n-516D46 General Purpose Flag  0000 (0)\n-516D48 Compression Method    0000 (0) 'Stored'\n-516D4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516D4E CRC                   00000000 (0)\n-516D52 Compressed Size       00000000 (0)\n-516D56 Uncompressed Size     00000000 (0)\n-516D5A Filename Length       0076 (118)\n-516D5C Extra Length          0009 (9)\n-516D5E Comment Length        0000 (0)\n-516D60 Disk Start            0000 (0)\n-516D62 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516D64 Ext File Attributes   00000000 (0)\n-516D68 Local Header Offset   00042CEF (273647)\n-516D6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516D6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516DE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516DE4   Length              0005 (5)\n-516DE6   Flags               01 (1) 'Modification'\n-516DE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516DEB CENTRAL HEADER #135   02014B50 (33639248)\n-516DEF Created Zip Spec      14 (20) '2.0'\n-516DF0 Created OS            00 (0) 'MS-DOS'\n-516DF1 Extract Zip Spec      14 (20) '2.0'\n-516DF2 Extract OS            00 (0) 'MS-DOS'\n-516DF3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516DF5 Compression Method    0000 (0) 'Stored'\n-516DF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516DFB CRC                   042BB565 (69973349)\n-516DFF Compressed Size       00001364 (4964)\n-516E03 Uncompressed Size     00001364 (4964)\n-516E07 Filename Length       008C (140)\n-516E09 Extra Length          0009 (9)\n-516E0B Comment Length        0000 (0)\n-516E0D Disk Start            0000 (0)\n-516E0F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516E11 Ext File Attributes   00000000 (0)\n-516E15 Local Header Offset   00042D8C (273804)\n-516E19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+516CB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516CB6   Length              0005 (5)\n+516CB8   Flags               01 (1) 'Modification'\n+516CB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516CBD CENTRAL HEADER #134   02014B50 (33639248)\n+516CC1 Created Zip Spec      14 (20) '2.0'\n+516CC2 Created OS            00 (0) 'MS-DOS'\n+516CC3 Extract Zip Spec      14 (20) '2.0'\n+516CC4 Extract OS            00 (0) 'MS-DOS'\n+516CC5 General Purpose Flag  0000 (0)\n+516CC7 Compression Method    0000 (0) 'Stored'\n+516CC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516CCD CRC                   00000000 (0)\n+516CD1 Compressed Size       00000000 (0)\n+516CD5 Uncompressed Size     00000000 (0)\n+516CD9 Filename Length       0076 (118)\n+516CDB Extra Length          0009 (9)\n+516CDD Comment Length        0000 (0)\n+516CDF Disk Start            0000 (0)\n+516CE1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516CE3 Ext File Attributes   00000000 (0)\n+516CE7 Local Header Offset   00042C86 (273542)\n+516CEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516CEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516D61 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516D63   Length              0005 (5)\n+516D65   Flags               01 (1) 'Modification'\n+516D66   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516D6A CENTRAL HEADER #135   02014B50 (33639248)\n+516D6E Created Zip Spec      14 (20) '2.0'\n+516D6F Created OS            00 (0) 'MS-DOS'\n+516D70 Extract Zip Spec      14 (20) '2.0'\n+516D71 Extract OS            00 (0) 'MS-DOS'\n+516D72 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516D74 Compression Method    0000 (0) 'Stored'\n+516D76 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516D7A CRC                   042BB565 (69973349)\n+516D7E Compressed Size       00001364 (4964)\n+516D82 Uncompressed Size     00001364 (4964)\n+516D86 Filename Length       008C (140)\n+516D88 Extra Length          0009 (9)\n+516D8A Comment Length        0000 (0)\n+516D8C Disk Start            0000 (0)\n+516D8E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516D90 Ext File Attributes   00000000 (0)\n+516D94 Local Header Offset   00042D23 (273699)\n+516D98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x516E19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x516D98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-516EA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516EA7   Length              0005 (5)\n-516EA9   Flags               01 (1) 'Modification'\n-516EAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516EAE CENTRAL HEADER #136   02014B50 (33639248)\n-516EB2 Created Zip Spec      14 (20) '2.0'\n-516EB3 Created OS            00 (0) 'MS-DOS'\n-516EB4 Extract Zip Spec      14 (20) '2.0'\n-516EB5 Extract OS            00 (0) 'MS-DOS'\n-516EB6 General Purpose Flag  0000 (0)\n-516EB8 Compression Method    0000 (0) 'Stored'\n-516EBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516EBE CRC                   00000000 (0)\n-516EC2 Compressed Size       00000000 (0)\n-516EC6 Uncompressed Size     00000000 (0)\n-516ECA Filename Length       0077 (119)\n-516ECC Extra Length          0009 (9)\n-516ECE Comment Length        0000 (0)\n-516ED0 Disk Start            0000 (0)\n-516ED2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516ED4 Ext File Attributes   00000000 (0)\n-516ED8 Local Header Offset   000441B3 (278963)\n-516EDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x516EDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-516F53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-516F55   Length              0005 (5)\n-516F57   Flags               01 (1) 'Modification'\n-516F58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-516F5C CENTRAL HEADER #137   02014B50 (33639248)\n-516F60 Created Zip Spec      14 (20) '2.0'\n-516F61 Created OS            00 (0) 'MS-DOS'\n-516F62 Extract Zip Spec      14 (20) '2.0'\n-516F63 Extract OS            00 (0) 'MS-DOS'\n-516F64 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-516F66 Compression Method    0000 (0) 'Stored'\n-516F68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-516F6C CRC                   7A63232B (2053317419)\n-516F70 Compressed Size       000013C0 (5056)\n-516F74 Uncompressed Size     000013C0 (5056)\n-516F78 Filename Length       008D (141)\n-516F7A Extra Length          0009 (9)\n-516F7C Comment Length        0000 (0)\n-516F7E Disk Start            0000 (0)\n-516F80 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-516F82 Ext File Attributes   00000000 (0)\n-516F86 Local Header Offset   00044251 (279121)\n-516F8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+516E24 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516E26   Length              0005 (5)\n+516E28   Flags               01 (1) 'Modification'\n+516E29   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516E2D CENTRAL HEADER #136   02014B50 (33639248)\n+516E31 Created Zip Spec      14 (20) '2.0'\n+516E32 Created OS            00 (0) 'MS-DOS'\n+516E33 Extract Zip Spec      14 (20) '2.0'\n+516E34 Extract OS            00 (0) 'MS-DOS'\n+516E35 General Purpose Flag  0000 (0)\n+516E37 Compression Method    0000 (0) 'Stored'\n+516E39 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516E3D CRC                   00000000 (0)\n+516E41 Compressed Size       00000000 (0)\n+516E45 Uncompressed Size     00000000 (0)\n+516E49 Filename Length       0077 (119)\n+516E4B Extra Length          0009 (9)\n+516E4D Comment Length        0000 (0)\n+516E4F Disk Start            0000 (0)\n+516E51 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516E53 Ext File Attributes   00000000 (0)\n+516E57 Local Header Offset   0004414A (278858)\n+516E5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516E5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516ED2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516ED4   Length              0005 (5)\n+516ED6   Flags               01 (1) 'Modification'\n+516ED7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516EDB CENTRAL HEADER #137   02014B50 (33639248)\n+516EDF Created Zip Spec      14 (20) '2.0'\n+516EE0 Created OS            00 (0) 'MS-DOS'\n+516EE1 Extract Zip Spec      14 (20) '2.0'\n+516EE2 Extract OS            00 (0) 'MS-DOS'\n+516EE3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+516EE5 Compression Method    0000 (0) 'Stored'\n+516EE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516EEB CRC                   7A63232B (2053317419)\n+516EEF Compressed Size       000013C0 (5056)\n+516EF3 Uncompressed Size     000013C0 (5056)\n+516EF7 Filename Length       008D (141)\n+516EF9 Extra Length          0009 (9)\n+516EFB Comment Length        0000 (0)\n+516EFD Disk Start            0000 (0)\n+516EFF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516F01 Ext File Attributes   00000000 (0)\n+516F05 Local Header Offset   000441E8 (279016)\n+516F09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x516F8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x516F09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-517017 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517019   Length              0005 (5)\n-51701B   Flags               01 (1) 'Modification'\n-51701C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517020 CENTRAL HEADER #138   02014B50 (33639248)\n-517024 Created Zip Spec      14 (20) '2.0'\n-517025 Created OS            00 (0) 'MS-DOS'\n-517026 Extract Zip Spec      14 (20) '2.0'\n-517027 Extract OS            00 (0) 'MS-DOS'\n-517028 General Purpose Flag  0000 (0)\n-51702A Compression Method    0000 (0) 'Stored'\n-51702C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517030 CRC                   00000000 (0)\n-517034 Compressed Size       00000000 (0)\n-517038 Uncompressed Size     00000000 (0)\n-51703C Filename Length       0026 (38)\n-51703E Extra Length          0009 (9)\n-517040 Comment Length        0000 (0)\n-517042 Disk Start            0000 (0)\n-517044 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517046 Ext File Attributes   00000000 (0)\n-51704A Local Header Offset   000456D5 (284373)\n-51704E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51704E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517074 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517076   Length              0005 (5)\n-517078   Flags               01 (1) 'Modification'\n-517079   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51707D CENTRAL HEADER #139   02014B50 (33639248)\n-517081 Created Zip Spec      14 (20) '2.0'\n-517082 Created OS            00 (0) 'MS-DOS'\n-517083 Extract Zip Spec      14 (20) '2.0'\n-517084 Extract OS            00 (0) 'MS-DOS'\n-517085 General Purpose Flag  0000 (0)\n-517087 Compression Method    0000 (0) 'Stored'\n-517089 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51708D CRC                   00000000 (0)\n-517091 Compressed Size       00000000 (0)\n-517095 Uncompressed Size     00000000 (0)\n-517099 Filename Length       002F (47)\n-51709B Extra Length          0009 (9)\n-51709D Comment Length        0000 (0)\n-51709F Disk Start            0000 (0)\n-5170A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5170A3 Ext File Attributes   00000000 (0)\n-5170A7 Local Header Offset   00045722 (284450)\n-5170AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5170AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5170DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5170DC   Length              0005 (5)\n-5170DE   Flags               01 (1) 'Modification'\n-5170DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5170E3 CENTRAL HEADER #140   02014B50 (33639248)\n-5170E7 Created Zip Spec      14 (20) '2.0'\n-5170E8 Created OS            00 (0) 'MS-DOS'\n-5170E9 Extract Zip Spec      14 (20) '2.0'\n-5170EA Extract OS            00 (0) 'MS-DOS'\n-5170EB General Purpose Flag  0000 (0)\n-5170ED Compression Method    0000 (0) 'Stored'\n-5170EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5170F3 CRC                   00000000 (0)\n-5170F7 Compressed Size       00000000 (0)\n-5170FB Uncompressed Size     00000000 (0)\n-5170FF Filename Length       0060 (96)\n-517101 Extra Length          0009 (9)\n-517103 Comment Length        0000 (0)\n-517105 Disk Start            0000 (0)\n-517107 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517109 Ext File Attributes   00000000 (0)\n-51710D Local Header Offset   00045778 (284536)\n-517111 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517111: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517171 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517173   Length              0005 (5)\n-517175   Flags               01 (1) 'Modification'\n-517176   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51717A CENTRAL HEADER #141   02014B50 (33639248)\n-51717E Created Zip Spec      14 (20) '2.0'\n-51717F Created OS            00 (0) 'MS-DOS'\n-517180 Extract Zip Spec      14 (20) '2.0'\n-517181 Extract OS            00 (0) 'MS-DOS'\n-517182 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517184 Compression Method    0000 (0) 'Stored'\n-517186 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51718A CRC                   19888393 (428376979)\n-51718E Compressed Size       0000092E (2350)\n-517192 Uncompressed Size     0000092E (2350)\n-517196 Filename Length       0076 (118)\n-517198 Extra Length          0009 (9)\n-51719A Comment Length        0000 (0)\n-51719C Disk Start            0000 (0)\n-51719E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5171A0 Ext File Attributes   00000000 (0)\n-5171A4 Local Header Offset   000457FF (284671)\n-5171A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5171A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51721E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517220   Length              0005 (5)\n-517222   Flags               01 (1) 'Modification'\n-517223   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517227 CENTRAL HEADER #142   02014B50 (33639248)\n-51722B Created Zip Spec      14 (20) '2.0'\n-51722C Created OS            00 (0) 'MS-DOS'\n-51722D Extract Zip Spec      14 (20) '2.0'\n-51722E Extract OS            00 (0) 'MS-DOS'\n-51722F General Purpose Flag  0000 (0)\n-517231 Compression Method    0000 (0) 'Stored'\n-517233 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517237 CRC                   00000000 (0)\n-51723B Compressed Size       00000000 (0)\n-51723F Uncompressed Size     00000000 (0)\n-517243 Filename Length       0026 (38)\n-517245 Extra Length          0009 (9)\n-517247 Comment Length        0000 (0)\n-517249 Disk Start            0000 (0)\n-51724B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51724D Ext File Attributes   00000000 (0)\n-517251 Local Header Offset   000461DA (287194)\n-517255 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517255: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51727B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51727D   Length              0005 (5)\n-51727F   Flags               01 (1) 'Modification'\n-517280   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517284 CENTRAL HEADER #143   02014B50 (33639248)\n-517288 Created Zip Spec      14 (20) '2.0'\n-517289 Created OS            00 (0) 'MS-DOS'\n-51728A Extract Zip Spec      14 (20) '2.0'\n-51728B Extract OS            00 (0) 'MS-DOS'\n-51728C General Purpose Flag  0000 (0)\n-51728E Compression Method    0000 (0) 'Stored'\n-517290 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517294 CRC                   00000000 (0)\n-517298 Compressed Size       00000000 (0)\n-51729C Uncompressed Size     00000000 (0)\n-5172A0 Filename Length       002F (47)\n-5172A2 Extra Length          0009 (9)\n-5172A4 Comment Length        0000 (0)\n-5172A6 Disk Start            0000 (0)\n-5172A8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5172AA Ext File Attributes   00000000 (0)\n-5172AE Local Header Offset   00046227 (287271)\n-5172B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5172B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5172E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5172E3   Length              0005 (5)\n-5172E5   Flags               01 (1) 'Modification'\n-5172E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5172EA CENTRAL HEADER #144   02014B50 (33639248)\n-5172EE Created Zip Spec      14 (20) '2.0'\n-5172EF Created OS            00 (0) 'MS-DOS'\n-5172F0 Extract Zip Spec      14 (20) '2.0'\n-5172F1 Extract OS            00 (0) 'MS-DOS'\n-5172F2 General Purpose Flag  0000 (0)\n-5172F4 Compression Method    0000 (0) 'Stored'\n-5172F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5172FA CRC                   00000000 (0)\n-5172FE Compressed Size       00000000 (0)\n-517302 Uncompressed Size     00000000 (0)\n-517306 Filename Length       0066 (102)\n-517308 Extra Length          0009 (9)\n-51730A Comment Length        0000 (0)\n-51730C Disk Start            0000 (0)\n-51730E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517310 Ext File Attributes   00000000 (0)\n-517314 Local Header Offset   0004627D (287357)\n-517318 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517318: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51737E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517380   Length              0005 (5)\n-517382   Flags               01 (1) 'Modification'\n-517383   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517387 CENTRAL HEADER #145   02014B50 (33639248)\n-51738B Created Zip Spec      14 (20) '2.0'\n-51738C Created OS            00 (0) 'MS-DOS'\n-51738D Extract Zip Spec      14 (20) '2.0'\n-51738E Extract OS            00 (0) 'MS-DOS'\n-51738F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517391 Compression Method    0000 (0) 'Stored'\n-517393 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517397 CRC                   8B1E3BB7 (2334014391)\n-51739B Compressed Size       00002091 (8337)\n-51739F Uncompressed Size     00002091 (8337)\n-5173A3 Filename Length       007C (124)\n-5173A5 Extra Length          0009 (9)\n-5173A7 Comment Length        0000 (0)\n-5173A9 Disk Start            0000 (0)\n-5173AB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5173AD Ext File Attributes   00000000 (0)\n-5173B1 Local Header Offset   0004630A (287498)\n-5173B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5173B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517431 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517433   Length              0005 (5)\n-517435   Flags               01 (1) 'Modification'\n-517436   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51743A CENTRAL HEADER #146   02014B50 (33639248)\n-51743E Created Zip Spec      14 (20) '2.0'\n-51743F Created OS            00 (0) 'MS-DOS'\n-517440 Extract Zip Spec      14 (20) '2.0'\n-517441 Extract OS            00 (0) 'MS-DOS'\n-517442 General Purpose Flag  0000 (0)\n-517444 Compression Method    0000 (0) 'Stored'\n-517446 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51744A CRC                   00000000 (0)\n-51744E Compressed Size       00000000 (0)\n-517452 Uncompressed Size     00000000 (0)\n-517456 Filename Length       002E (46)\n-517458 Extra Length          0009 (9)\n-51745A Comment Length        0000 (0)\n-51745C Disk Start            0000 (0)\n-51745E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517460 Ext File Attributes   00000000 (0)\n-517464 Local Header Offset   0004844E (296014)\n-517468 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517468: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517496 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517498   Length              0005 (5)\n-51749A   Flags               01 (1) 'Modification'\n-51749B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51749F CENTRAL HEADER #147   02014B50 (33639248)\n-5174A3 Created Zip Spec      14 (20) '2.0'\n-5174A4 Created OS            00 (0) 'MS-DOS'\n-5174A5 Extract Zip Spec      14 (20) '2.0'\n-5174A6 Extract OS            00 (0) 'MS-DOS'\n-5174A7 General Purpose Flag  0000 (0)\n-5174A9 Compression Method    0000 (0) 'Stored'\n-5174AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5174AF CRC                   00000000 (0)\n-5174B3 Compressed Size       00000000 (0)\n-5174B7 Uncompressed Size     00000000 (0)\n-5174BB Filename Length       0037 (55)\n-5174BD Extra Length          0009 (9)\n-5174BF Comment Length        0000 (0)\n-5174C1 Disk Start            0000 (0)\n-5174C3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5174C5 Ext File Attributes   00000000 (0)\n-5174C9 Local Header Offset   000484A3 (296099)\n-5174CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5174CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517504 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517506   Length              0005 (5)\n-517508   Flags               01 (1) 'Modification'\n-517509   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51750D CENTRAL HEADER #148   02014B50 (33639248)\n-517511 Created Zip Spec      14 (20) '2.0'\n-517512 Created OS            00 (0) 'MS-DOS'\n-517513 Extract Zip Spec      14 (20) '2.0'\n-517514 Extract OS            00 (0) 'MS-DOS'\n-517515 General Purpose Flag  0000 (0)\n-517517 Compression Method    0000 (0) 'Stored'\n-517519 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51751D CRC                   00000000 (0)\n-517521 Compressed Size       00000000 (0)\n-517525 Uncompressed Size     00000000 (0)\n-517529 Filename Length       007B (123)\n-51752B Extra Length          0009 (9)\n-51752D Comment Length        0000 (0)\n-51752F Disk Start            0000 (0)\n-517531 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517533 Ext File Attributes   00000000 (0)\n-517537 Local Header Offset   00048501 (296193)\n-51753B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51753B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5175B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5175B8   Length              0005 (5)\n-5175BA   Flags               01 (1) 'Modification'\n-5175BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5175BF CENTRAL HEADER #149   02014B50 (33639248)\n-5175C3 Created Zip Spec      14 (20) '2.0'\n-5175C4 Created OS            00 (0) 'MS-DOS'\n-5175C5 Extract Zip Spec      14 (20) '2.0'\n-5175C6 Extract OS            00 (0) 'MS-DOS'\n-5175C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5175C9 Compression Method    0000 (0) 'Stored'\n-5175CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5175CF CRC                   0D142FFC (219426812)\n-5175D3 Compressed Size       00001A7B (6779)\n-5175D7 Uncompressed Size     00001A7B (6779)\n-5175DB Filename Length       0091 (145)\n-5175DD Extra Length          0009 (9)\n-5175DF Comment Length        0000 (0)\n-5175E1 Disk Start            0000 (0)\n-5175E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5175E5 Ext File Attributes   00000000 (0)\n-5175E9 Local Header Offset   000485A3 (296355)\n-5175ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+516F96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516F98   Length              0005 (5)\n+516F9A   Flags               01 (1) 'Modification'\n+516F9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516F9F CENTRAL HEADER #138   02014B50 (33639248)\n+516FA3 Created Zip Spec      14 (20) '2.0'\n+516FA4 Created OS            00 (0) 'MS-DOS'\n+516FA5 Extract Zip Spec      14 (20) '2.0'\n+516FA6 Extract OS            00 (0) 'MS-DOS'\n+516FA7 General Purpose Flag  0000 (0)\n+516FA9 Compression Method    0000 (0) 'Stored'\n+516FAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+516FAF CRC                   00000000 (0)\n+516FB3 Compressed Size       00000000 (0)\n+516FB7 Uncompressed Size     00000000 (0)\n+516FBB Filename Length       0026 (38)\n+516FBD Extra Length          0009 (9)\n+516FBF Comment Length        0000 (0)\n+516FC1 Disk Start            0000 (0)\n+516FC3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+516FC5 Ext File Attributes   00000000 (0)\n+516FC9 Local Header Offset   0004566C (284268)\n+516FCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x516FCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+516FF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+516FF5   Length              0005 (5)\n+516FF7   Flags               01 (1) 'Modification'\n+516FF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+516FFC CENTRAL HEADER #139   02014B50 (33639248)\n+517000 Created Zip Spec      14 (20) '2.0'\n+517001 Created OS            00 (0) 'MS-DOS'\n+517002 Extract Zip Spec      14 (20) '2.0'\n+517003 Extract OS            00 (0) 'MS-DOS'\n+517004 General Purpose Flag  0000 (0)\n+517006 Compression Method    0000 (0) 'Stored'\n+517008 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51700C CRC                   00000000 (0)\n+517010 Compressed Size       00000000 (0)\n+517014 Uncompressed Size     00000000 (0)\n+517018 Filename Length       002F (47)\n+51701A Extra Length          0009 (9)\n+51701C Comment Length        0000 (0)\n+51701E Disk Start            0000 (0)\n+517020 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517022 Ext File Attributes   00000000 (0)\n+517026 Local Header Offset   000456B9 (284345)\n+51702A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51702A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517059 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51705B   Length              0005 (5)\n+51705D   Flags               01 (1) 'Modification'\n+51705E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517062 CENTRAL HEADER #140   02014B50 (33639248)\n+517066 Created Zip Spec      14 (20) '2.0'\n+517067 Created OS            00 (0) 'MS-DOS'\n+517068 Extract Zip Spec      14 (20) '2.0'\n+517069 Extract OS            00 (0) 'MS-DOS'\n+51706A General Purpose Flag  0000 (0)\n+51706C Compression Method    0000 (0) 'Stored'\n+51706E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517072 CRC                   00000000 (0)\n+517076 Compressed Size       00000000 (0)\n+51707A Uncompressed Size     00000000 (0)\n+51707E Filename Length       0060 (96)\n+517080 Extra Length          0009 (9)\n+517082 Comment Length        0000 (0)\n+517084 Disk Start            0000 (0)\n+517086 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517088 Ext File Attributes   00000000 (0)\n+51708C Local Header Offset   0004570F (284431)\n+517090 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517090: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5170F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5170F2   Length              0005 (5)\n+5170F4   Flags               01 (1) 'Modification'\n+5170F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5170F9 CENTRAL HEADER #141   02014B50 (33639248)\n+5170FD Created Zip Spec      14 (20) '2.0'\n+5170FE Created OS            00 (0) 'MS-DOS'\n+5170FF Extract Zip Spec      14 (20) '2.0'\n+517100 Extract OS            00 (0) 'MS-DOS'\n+517101 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517103 Compression Method    0000 (0) 'Stored'\n+517105 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517109 CRC                   19888393 (428376979)\n+51710D Compressed Size       0000092E (2350)\n+517111 Uncompressed Size     0000092E (2350)\n+517115 Filename Length       0076 (118)\n+517117 Extra Length          0009 (9)\n+517119 Comment Length        0000 (0)\n+51711B Disk Start            0000 (0)\n+51711D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51711F Ext File Attributes   00000000 (0)\n+517123 Local Header Offset   00045796 (284566)\n+517127 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517127: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51719D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51719F   Length              0005 (5)\n+5171A1   Flags               01 (1) 'Modification'\n+5171A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5171A6 CENTRAL HEADER #142   02014B50 (33639248)\n+5171AA Created Zip Spec      14 (20) '2.0'\n+5171AB Created OS            00 (0) 'MS-DOS'\n+5171AC Extract Zip Spec      14 (20) '2.0'\n+5171AD Extract OS            00 (0) 'MS-DOS'\n+5171AE General Purpose Flag  0000 (0)\n+5171B0 Compression Method    0000 (0) 'Stored'\n+5171B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5171B6 CRC                   00000000 (0)\n+5171BA Compressed Size       00000000 (0)\n+5171BE Uncompressed Size     00000000 (0)\n+5171C2 Filename Length       0026 (38)\n+5171C4 Extra Length          0009 (9)\n+5171C6 Comment Length        0000 (0)\n+5171C8 Disk Start            0000 (0)\n+5171CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5171CC Ext File Attributes   00000000 (0)\n+5171D0 Local Header Offset   00046171 (287089)\n+5171D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5171D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5171FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5171FC   Length              0005 (5)\n+5171FE   Flags               01 (1) 'Modification'\n+5171FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517203 CENTRAL HEADER #143   02014B50 (33639248)\n+517207 Created Zip Spec      14 (20) '2.0'\n+517208 Created OS            00 (0) 'MS-DOS'\n+517209 Extract Zip Spec      14 (20) '2.0'\n+51720A Extract OS            00 (0) 'MS-DOS'\n+51720B General Purpose Flag  0000 (0)\n+51720D Compression Method    0000 (0) 'Stored'\n+51720F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517213 CRC                   00000000 (0)\n+517217 Compressed Size       00000000 (0)\n+51721B Uncompressed Size     00000000 (0)\n+51721F Filename Length       002F (47)\n+517221 Extra Length          0009 (9)\n+517223 Comment Length        0000 (0)\n+517225 Disk Start            0000 (0)\n+517227 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517229 Ext File Attributes   00000000 (0)\n+51722D Local Header Offset   000461BE (287166)\n+517231 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517231: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517260 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517262   Length              0005 (5)\n+517264   Flags               01 (1) 'Modification'\n+517265   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517269 CENTRAL HEADER #144   02014B50 (33639248)\n+51726D Created Zip Spec      14 (20) '2.0'\n+51726E Created OS            00 (0) 'MS-DOS'\n+51726F Extract Zip Spec      14 (20) '2.0'\n+517270 Extract OS            00 (0) 'MS-DOS'\n+517271 General Purpose Flag  0000 (0)\n+517273 Compression Method    0000 (0) 'Stored'\n+517275 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517279 CRC                   00000000 (0)\n+51727D Compressed Size       00000000 (0)\n+517281 Uncompressed Size     00000000 (0)\n+517285 Filename Length       0066 (102)\n+517287 Extra Length          0009 (9)\n+517289 Comment Length        0000 (0)\n+51728B Disk Start            0000 (0)\n+51728D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51728F Ext File Attributes   00000000 (0)\n+517293 Local Header Offset   00046214 (287252)\n+517297 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517297: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5172FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5172FF   Length              0005 (5)\n+517301   Flags               01 (1) 'Modification'\n+517302   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517306 CENTRAL HEADER #145   02014B50 (33639248)\n+51730A Created Zip Spec      14 (20) '2.0'\n+51730B Created OS            00 (0) 'MS-DOS'\n+51730C Extract Zip Spec      14 (20) '2.0'\n+51730D Extract OS            00 (0) 'MS-DOS'\n+51730E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517310 Compression Method    0000 (0) 'Stored'\n+517312 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517316 CRC                   8B1E3BB7 (2334014391)\n+51731A Compressed Size       00002091 (8337)\n+51731E Uncompressed Size     00002091 (8337)\n+517322 Filename Length       007C (124)\n+517324 Extra Length          0009 (9)\n+517326 Comment Length        0000 (0)\n+517328 Disk Start            0000 (0)\n+51732A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51732C Ext File Attributes   00000000 (0)\n+517330 Local Header Offset   000462A1 (287393)\n+517334 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517334: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5173B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5173B2   Length              0005 (5)\n+5173B4   Flags               01 (1) 'Modification'\n+5173B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5173B9 CENTRAL HEADER #146   02014B50 (33639248)\n+5173BD Created Zip Spec      14 (20) '2.0'\n+5173BE Created OS            00 (0) 'MS-DOS'\n+5173BF Extract Zip Spec      14 (20) '2.0'\n+5173C0 Extract OS            00 (0) 'MS-DOS'\n+5173C1 General Purpose Flag  0000 (0)\n+5173C3 Compression Method    0000 (0) 'Stored'\n+5173C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5173C9 CRC                   00000000 (0)\n+5173CD Compressed Size       00000000 (0)\n+5173D1 Uncompressed Size     00000000 (0)\n+5173D5 Filename Length       002E (46)\n+5173D7 Extra Length          0009 (9)\n+5173D9 Comment Length        0000 (0)\n+5173DB Disk Start            0000 (0)\n+5173DD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5173DF Ext File Attributes   00000000 (0)\n+5173E3 Local Header Offset   000483E5 (295909)\n+5173E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5173E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517415 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517417   Length              0005 (5)\n+517419   Flags               01 (1) 'Modification'\n+51741A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51741E CENTRAL HEADER #147   02014B50 (33639248)\n+517422 Created Zip Spec      14 (20) '2.0'\n+517423 Created OS            00 (0) 'MS-DOS'\n+517424 Extract Zip Spec      14 (20) '2.0'\n+517425 Extract OS            00 (0) 'MS-DOS'\n+517426 General Purpose Flag  0000 (0)\n+517428 Compression Method    0000 (0) 'Stored'\n+51742A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51742E CRC                   00000000 (0)\n+517432 Compressed Size       00000000 (0)\n+517436 Uncompressed Size     00000000 (0)\n+51743A Filename Length       0037 (55)\n+51743C Extra Length          0009 (9)\n+51743E Comment Length        0000 (0)\n+517440 Disk Start            0000 (0)\n+517442 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517444 Ext File Attributes   00000000 (0)\n+517448 Local Header Offset   0004843A (295994)\n+51744C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51744C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517483 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517485   Length              0005 (5)\n+517487   Flags               01 (1) 'Modification'\n+517488   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51748C CENTRAL HEADER #148   02014B50 (33639248)\n+517490 Created Zip Spec      14 (20) '2.0'\n+517491 Created OS            00 (0) 'MS-DOS'\n+517492 Extract Zip Spec      14 (20) '2.0'\n+517493 Extract OS            00 (0) 'MS-DOS'\n+517494 General Purpose Flag  0000 (0)\n+517496 Compression Method    0000 (0) 'Stored'\n+517498 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51749C CRC                   00000000 (0)\n+5174A0 Compressed Size       00000000 (0)\n+5174A4 Uncompressed Size     00000000 (0)\n+5174A8 Filename Length       007B (123)\n+5174AA Extra Length          0009 (9)\n+5174AC Comment Length        0000 (0)\n+5174AE Disk Start            0000 (0)\n+5174B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5174B2 Ext File Attributes   00000000 (0)\n+5174B6 Local Header Offset   00048498 (296088)\n+5174BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5174BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517535 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517537   Length              0005 (5)\n+517539   Flags               01 (1) 'Modification'\n+51753A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51753E CENTRAL HEADER #149   02014B50 (33639248)\n+517542 Created Zip Spec      14 (20) '2.0'\n+517543 Created OS            00 (0) 'MS-DOS'\n+517544 Extract Zip Spec      14 (20) '2.0'\n+517545 Extract OS            00 (0) 'MS-DOS'\n+517546 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517548 Compression Method    0000 (0) 'Stored'\n+51754A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51754E CRC                   0D142FFC (219426812)\n+517552 Compressed Size       00001A7B (6779)\n+517556 Uncompressed Size     00001A7B (6779)\n+51755A Filename Length       0091 (145)\n+51755C Extra Length          0009 (9)\n+51755E Comment Length        0000 (0)\n+517560 Disk Start            0000 (0)\n+517562 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517564 Ext File Attributes   00000000 (0)\n+517568 Local Header Offset   0004853A (296250)\n+51756C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5175ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51756C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51767E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517680   Length              0005 (5)\n-517682   Flags               01 (1) 'Modification'\n-517683   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517687 CENTRAL HEADER #150   02014B50 (33639248)\n-51768B Created Zip Spec      14 (20) '2.0'\n-51768C Created OS            00 (0) 'MS-DOS'\n-51768D Extract Zip Spec      14 (20) '2.0'\n-51768E Extract OS            00 (0) 'MS-DOS'\n-51768F General Purpose Flag  0000 (0)\n-517691 Compression Method    0000 (0) 'Stored'\n-517693 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517697 CRC                   00000000 (0)\n-51769B Compressed Size       00000000 (0)\n-51769F Uncompressed Size     00000000 (0)\n-5176A3 Filename Length       0031 (49)\n-5176A5 Extra Length          0009 (9)\n-5176A7 Comment Length        0000 (0)\n-5176A9 Disk Start            0000 (0)\n-5176AB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5176AD Ext File Attributes   00000000 (0)\n-5176B1 Local Header Offset   0004A0E6 (303334)\n-5176B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5176B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5176E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5176E8   Length              0005 (5)\n-5176EA   Flags               01 (1) 'Modification'\n-5176EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5176EF CENTRAL HEADER #151   02014B50 (33639248)\n-5176F3 Created Zip Spec      14 (20) '2.0'\n-5176F4 Created OS            00 (0) 'MS-DOS'\n-5176F5 Extract Zip Spec      14 (20) '2.0'\n-5176F6 Extract OS            00 (0) 'MS-DOS'\n-5176F7 General Purpose Flag  0000 (0)\n-5176F9 Compression Method    0000 (0) 'Stored'\n-5176FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5176FF CRC                   00000000 (0)\n-517703 Compressed Size       00000000 (0)\n-517707 Uncompressed Size     00000000 (0)\n-51770B Filename Length       003A (58)\n-51770D Extra Length          0009 (9)\n-51770F Comment Length        0000 (0)\n-517711 Disk Start            0000 (0)\n-517713 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517715 Ext File Attributes   00000000 (0)\n-517719 Local Header Offset   0004A13E (303422)\n-51771D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51771D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517757 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517759   Length              0005 (5)\n-51775B   Flags               01 (1) 'Modification'\n-51775C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517760 CENTRAL HEADER #152   02014B50 (33639248)\n-517764 Created Zip Spec      14 (20) '2.0'\n-517765 Created OS            00 (0) 'MS-DOS'\n-517766 Extract Zip Spec      14 (20) '2.0'\n-517767 Extract OS            00 (0) 'MS-DOS'\n-517768 General Purpose Flag  0000 (0)\n-51776A Compression Method    0000 (0) 'Stored'\n-51776C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517770 CRC                   00000000 (0)\n-517774 Compressed Size       00000000 (0)\n-517778 Uncompressed Size     00000000 (0)\n-51777C Filename Length       0081 (129)\n-51777E Extra Length          0009 (9)\n-517780 Comment Length        0000 (0)\n-517782 Disk Start            0000 (0)\n-517784 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517786 Ext File Attributes   00000000 (0)\n-51778A Local Header Offset   0004A19F (303519)\n-51778E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51778E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51780F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517811   Length              0005 (5)\n-517813   Flags               01 (1) 'Modification'\n-517814   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517818 CENTRAL HEADER #153   02014B50 (33639248)\n-51781C Created Zip Spec      14 (20) '2.0'\n-51781D Created OS            00 (0) 'MS-DOS'\n-51781E Extract Zip Spec      14 (20) '2.0'\n-51781F Extract OS            00 (0) 'MS-DOS'\n-517820 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517822 Compression Method    0000 (0) 'Stored'\n-517824 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517828 CRC                   726CFBF2 (1919745010)\n-51782C Compressed Size       00000886 (2182)\n-517830 Uncompressed Size     00000886 (2182)\n-517834 Filename Length       0097 (151)\n-517836 Extra Length          0009 (9)\n-517838 Comment Length        0000 (0)\n-51783A Disk Start            0000 (0)\n-51783C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51783E Ext File Attributes   00000000 (0)\n-517842 Local Header Offset   0004A247 (303687)\n-517846 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5175FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5175FF   Length              0005 (5)\n+517601   Flags               01 (1) 'Modification'\n+517602   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517606 CENTRAL HEADER #150   02014B50 (33639248)\n+51760A Created Zip Spec      14 (20) '2.0'\n+51760B Created OS            00 (0) 'MS-DOS'\n+51760C Extract Zip Spec      14 (20) '2.0'\n+51760D Extract OS            00 (0) 'MS-DOS'\n+51760E General Purpose Flag  0000 (0)\n+517610 Compression Method    0000 (0) 'Stored'\n+517612 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517616 CRC                   00000000 (0)\n+51761A Compressed Size       00000000 (0)\n+51761E Uncompressed Size     00000000 (0)\n+517622 Filename Length       0031 (49)\n+517624 Extra Length          0009 (9)\n+517626 Comment Length        0000 (0)\n+517628 Disk Start            0000 (0)\n+51762A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51762C Ext File Attributes   00000000 (0)\n+517630 Local Header Offset   0004A07D (303229)\n+517634 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517634: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517665 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517667   Length              0005 (5)\n+517669   Flags               01 (1) 'Modification'\n+51766A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51766E CENTRAL HEADER #151   02014B50 (33639248)\n+517672 Created Zip Spec      14 (20) '2.0'\n+517673 Created OS            00 (0) 'MS-DOS'\n+517674 Extract Zip Spec      14 (20) '2.0'\n+517675 Extract OS            00 (0) 'MS-DOS'\n+517676 General Purpose Flag  0000 (0)\n+517678 Compression Method    0000 (0) 'Stored'\n+51767A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51767E CRC                   00000000 (0)\n+517682 Compressed Size       00000000 (0)\n+517686 Uncompressed Size     00000000 (0)\n+51768A Filename Length       003A (58)\n+51768C Extra Length          0009 (9)\n+51768E Comment Length        0000 (0)\n+517690 Disk Start            0000 (0)\n+517692 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517694 Ext File Attributes   00000000 (0)\n+517698 Local Header Offset   0004A0D5 (303317)\n+51769C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51769C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5176D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5176D8   Length              0005 (5)\n+5176DA   Flags               01 (1) 'Modification'\n+5176DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5176DF CENTRAL HEADER #152   02014B50 (33639248)\n+5176E3 Created Zip Spec      14 (20) '2.0'\n+5176E4 Created OS            00 (0) 'MS-DOS'\n+5176E5 Extract Zip Spec      14 (20) '2.0'\n+5176E6 Extract OS            00 (0) 'MS-DOS'\n+5176E7 General Purpose Flag  0000 (0)\n+5176E9 Compression Method    0000 (0) 'Stored'\n+5176EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5176EF CRC                   00000000 (0)\n+5176F3 Compressed Size       00000000 (0)\n+5176F7 Uncompressed Size     00000000 (0)\n+5176FB Filename Length       0081 (129)\n+5176FD Extra Length          0009 (9)\n+5176FF Comment Length        0000 (0)\n+517701 Disk Start            0000 (0)\n+517703 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517705 Ext File Attributes   00000000 (0)\n+517709 Local Header Offset   0004A136 (303414)\n+51770D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51770D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51778E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517790   Length              0005 (5)\n+517792   Flags               01 (1) 'Modification'\n+517793   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517797 CENTRAL HEADER #153   02014B50 (33639248)\n+51779B Created Zip Spec      14 (20) '2.0'\n+51779C Created OS            00 (0) 'MS-DOS'\n+51779D Extract Zip Spec      14 (20) '2.0'\n+51779E Extract OS            00 (0) 'MS-DOS'\n+51779F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5177A1 Compression Method    0000 (0) 'Stored'\n+5177A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5177A7 CRC                   726CFBF2 (1919745010)\n+5177AB Compressed Size       00000886 (2182)\n+5177AF Uncompressed Size     00000886 (2182)\n+5177B3 Filename Length       0097 (151)\n+5177B5 Extra Length          0009 (9)\n+5177B7 Comment Length        0000 (0)\n+5177B9 Disk Start            0000 (0)\n+5177BB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5177BD Ext File Attributes   00000000 (0)\n+5177C1 Local Header Offset   0004A1DE (303582)\n+5177C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x517846: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5177C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5178DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5178DF   Length              0005 (5)\n-5178E1   Flags               01 (1) 'Modification'\n-5178E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5178E6 CENTRAL HEADER #154   02014B50 (33639248)\n-5178EA Created Zip Spec      14 (20) '2.0'\n-5178EB Created OS            00 (0) 'MS-DOS'\n-5178EC Extract Zip Spec      14 (20) '2.0'\n-5178ED Extract OS            00 (0) 'MS-DOS'\n-5178EE General Purpose Flag  0000 (0)\n-5178F0 Compression Method    0000 (0) 'Stored'\n-5178F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5178F6 CRC                   00000000 (0)\n-5178FA Compressed Size       00000000 (0)\n-5178FE Uncompressed Size     00000000 (0)\n-517902 Filename Length       0088 (136)\n-517904 Extra Length          0009 (9)\n-517906 Comment Length        0000 (0)\n-517908 Disk Start            0000 (0)\n-51790A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51790C Ext File Attributes   00000000 (0)\n-517910 Local Header Offset   0004AB9B (306075)\n-517914 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51785C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51785E   Length              0005 (5)\n+517860   Flags               01 (1) 'Modification'\n+517861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517865 CENTRAL HEADER #154   02014B50 (33639248)\n+517869 Created Zip Spec      14 (20) '2.0'\n+51786A Created OS            00 (0) 'MS-DOS'\n+51786B Extract Zip Spec      14 (20) '2.0'\n+51786C Extract OS            00 (0) 'MS-DOS'\n+51786D General Purpose Flag  0000 (0)\n+51786F Compression Method    0000 (0) 'Stored'\n+517871 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517875 CRC                   00000000 (0)\n+517879 Compressed Size       00000000 (0)\n+51787D Uncompressed Size     00000000 (0)\n+517881 Filename Length       0088 (136)\n+517883 Extra Length          0009 (9)\n+517885 Comment Length        0000 (0)\n+517887 Disk Start            0000 (0)\n+517889 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51788B Ext File Attributes   00000000 (0)\n+51788F Local Header Offset   0004AB32 (305970)\n+517893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x517914: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x517893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51799C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51799E   Length              0005 (5)\n-5179A0   Flags               01 (1) 'Modification'\n-5179A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5179A5 CENTRAL HEADER #155   02014B50 (33639248)\n-5179A9 Created Zip Spec      14 (20) '2.0'\n-5179AA Created OS            00 (0) 'MS-DOS'\n-5179AB Extract Zip Spec      14 (20) '2.0'\n-5179AC Extract OS            00 (0) 'MS-DOS'\n-5179AD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5179AF Compression Method    0000 (0) 'Stored'\n-5179B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5179B5 CRC                   0124A640 (19179072)\n-5179B9 Compressed Size       00001071 (4209)\n-5179BD Uncompressed Size     00001071 (4209)\n-5179C1 Filename Length       009E (158)\n-5179C3 Extra Length          0009 (9)\n-5179C5 Comment Length        0000 (0)\n-5179C7 Disk Start            0000 (0)\n-5179C9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5179CB Ext File Attributes   00000000 (0)\n-5179CF Local Header Offset   0004AC4A (306250)\n-5179D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51791B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51791D   Length              0005 (5)\n+51791F   Flags               01 (1) 'Modification'\n+517920   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517924 CENTRAL HEADER #155   02014B50 (33639248)\n+517928 Created Zip Spec      14 (20) '2.0'\n+517929 Created OS            00 (0) 'MS-DOS'\n+51792A Extract Zip Spec      14 (20) '2.0'\n+51792B Extract OS            00 (0) 'MS-DOS'\n+51792C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51792E Compression Method    0000 (0) 'Stored'\n+517930 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517934 CRC                   0124A640 (19179072)\n+517938 Compressed Size       00001071 (4209)\n+51793C Uncompressed Size     00001071 (4209)\n+517940 Filename Length       009E (158)\n+517942 Extra Length          0009 (9)\n+517944 Comment Length        0000 (0)\n+517946 Disk Start            0000 (0)\n+517948 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51794A Ext File Attributes   00000000 (0)\n+51794E Local Header Offset   0004ABE1 (306145)\n+517952 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5179D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x517952: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-517A71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517A73   Length              0005 (5)\n-517A75   Flags               01 (1) 'Modification'\n-517A76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517A7A CENTRAL HEADER #156   02014B50 (33639248)\n-517A7E Created Zip Spec      14 (20) '2.0'\n-517A7F Created OS            00 (0) 'MS-DOS'\n-517A80 Extract Zip Spec      14 (20) '2.0'\n-517A81 Extract OS            00 (0) 'MS-DOS'\n-517A82 General Purpose Flag  0000 (0)\n-517A84 Compression Method    0000 (0) 'Stored'\n-517A86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517A8A CRC                   00000000 (0)\n-517A8E Compressed Size       00000000 (0)\n-517A92 Uncompressed Size     00000000 (0)\n-517A96 Filename Length       0088 (136)\n-517A98 Extra Length          0009 (9)\n-517A9A Comment Length        0000 (0)\n-517A9C Disk Start            0000 (0)\n-517A9E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517AA0 Ext File Attributes   00000000 (0)\n-517AA4 Local Header Offset   0004BD90 (310672)\n-517AA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5179F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5179F2   Length              0005 (5)\n+5179F4   Flags               01 (1) 'Modification'\n+5179F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5179F9 CENTRAL HEADER #156   02014B50 (33639248)\n+5179FD Created Zip Spec      14 (20) '2.0'\n+5179FE Created OS            00 (0) 'MS-DOS'\n+5179FF Extract Zip Spec      14 (20) '2.0'\n+517A00 Extract OS            00 (0) 'MS-DOS'\n+517A01 General Purpose Flag  0000 (0)\n+517A03 Compression Method    0000 (0) 'Stored'\n+517A05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517A09 CRC                   00000000 (0)\n+517A0D Compressed Size       00000000 (0)\n+517A11 Uncompressed Size     00000000 (0)\n+517A15 Filename Length       0088 (136)\n+517A17 Extra Length          0009 (9)\n+517A19 Comment Length        0000 (0)\n+517A1B Disk Start            0000 (0)\n+517A1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517A1F Ext File Attributes   00000000 (0)\n+517A23 Local Header Offset   0004BD27 (310567)\n+517A27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x517AA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x517A27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-517B30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517B32   Length              0005 (5)\n-517B34   Flags               01 (1) 'Modification'\n-517B35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517B39 CENTRAL HEADER #157   02014B50 (33639248)\n-517B3D Created Zip Spec      14 (20) '2.0'\n-517B3E Created OS            00 (0) 'MS-DOS'\n-517B3F Extract Zip Spec      14 (20) '2.0'\n-517B40 Extract OS            00 (0) 'MS-DOS'\n-517B41 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517B43 Compression Method    0000 (0) 'Stored'\n-517B45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517B49 CRC                   7E793C9C (2121874588)\n-517B4D Compressed Size       000008CC (2252)\n-517B51 Uncompressed Size     000008CC (2252)\n-517B55 Filename Length       009E (158)\n-517B57 Extra Length          0009 (9)\n-517B59 Comment Length        0000 (0)\n-517B5B Disk Start            0000 (0)\n-517B5D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517B5F Ext File Attributes   00000000 (0)\n-517B63 Local Header Offset   0004BE3F (310847)\n-517B67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+517AAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517AB1   Length              0005 (5)\n+517AB3   Flags               01 (1) 'Modification'\n+517AB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517AB8 CENTRAL HEADER #157   02014B50 (33639248)\n+517ABC Created Zip Spec      14 (20) '2.0'\n+517ABD Created OS            00 (0) 'MS-DOS'\n+517ABE Extract Zip Spec      14 (20) '2.0'\n+517ABF Extract OS            00 (0) 'MS-DOS'\n+517AC0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517AC2 Compression Method    0000 (0) 'Stored'\n+517AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517AC8 CRC                   7E793C9C (2121874588)\n+517ACC Compressed Size       000008CC (2252)\n+517AD0 Uncompressed Size     000008CC (2252)\n+517AD4 Filename Length       009E (158)\n+517AD6 Extra Length          0009 (9)\n+517AD8 Comment Length        0000 (0)\n+517ADA Disk Start            0000 (0)\n+517ADC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517ADE Ext File Attributes   00000000 (0)\n+517AE2 Local Header Offset   0004BDD6 (310742)\n+517AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x517B67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x517AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-517C05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517C07   Length              0005 (5)\n-517C09   Flags               01 (1) 'Modification'\n-517C0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517C0E CENTRAL HEADER #158   02014B50 (33639248)\n-517C12 Created Zip Spec      14 (20) '2.0'\n-517C13 Created OS            00 (0) 'MS-DOS'\n-517C14 Extract Zip Spec      14 (20) '2.0'\n-517C15 Extract OS            00 (0) 'MS-DOS'\n-517C16 General Purpose Flag  0000 (0)\n-517C18 Compression Method    0000 (0) 'Stored'\n-517C1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517C1E CRC                   00000000 (0)\n-517C22 Compressed Size       00000000 (0)\n-517C26 Uncompressed Size     00000000 (0)\n-517C2A Filename Length       0026 (38)\n-517C2C Extra Length          0009 (9)\n-517C2E Comment Length        0000 (0)\n-517C30 Disk Start            0000 (0)\n-517C32 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517C34 Ext File Attributes   00000000 (0)\n-517C38 Local Header Offset   0004C7E0 (313312)\n-517C3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517C3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517C62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517C64   Length              0005 (5)\n-517C66   Flags               01 (1) 'Modification'\n-517C67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517C6B CENTRAL HEADER #159   02014B50 (33639248)\n-517C6F Created Zip Spec      14 (20) '2.0'\n-517C70 Created OS            00 (0) 'MS-DOS'\n-517C71 Extract Zip Spec      14 (20) '2.0'\n-517C72 Extract OS            00 (0) 'MS-DOS'\n-517C73 General Purpose Flag  0000 (0)\n-517C75 Compression Method    0000 (0) 'Stored'\n-517C77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517C7B CRC                   00000000 (0)\n-517C7F Compressed Size       00000000 (0)\n-517C83 Uncompressed Size     00000000 (0)\n-517C87 Filename Length       002F (47)\n-517C89 Extra Length          0009 (9)\n-517C8B Comment Length        0000 (0)\n-517C8D Disk Start            0000 (0)\n-517C8F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517C91 Ext File Attributes   00000000 (0)\n-517C95 Local Header Offset   0004C82D (313389)\n-517C99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517C99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517CC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517CCA   Length              0005 (5)\n-517CCC   Flags               01 (1) 'Modification'\n-517CCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517CD1 CENTRAL HEADER #160   02014B50 (33639248)\n-517CD5 Created Zip Spec      14 (20) '2.0'\n-517CD6 Created OS            00 (0) 'MS-DOS'\n-517CD7 Extract Zip Spec      14 (20) '2.0'\n-517CD8 Extract OS            00 (0) 'MS-DOS'\n-517CD9 General Purpose Flag  0000 (0)\n-517CDB Compression Method    0000 (0) 'Stored'\n-517CDD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517CE1 CRC                   00000000 (0)\n-517CE5 Compressed Size       00000000 (0)\n-517CE9 Uncompressed Size     00000000 (0)\n-517CED Filename Length       005D (93)\n-517CEF Extra Length          0009 (9)\n-517CF1 Comment Length        0000 (0)\n-517CF3 Disk Start            0000 (0)\n-517CF5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517CF7 Ext File Attributes   00000000 (0)\n-517CFB Local Header Offset   0004C883 (313475)\n-517CFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517CFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517D5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517D5E   Length              0005 (5)\n-517D60   Flags               01 (1) 'Modification'\n-517D61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517D65 CENTRAL HEADER #161   02014B50 (33639248)\n-517D69 Created Zip Spec      14 (20) '2.0'\n-517D6A Created OS            00 (0) 'MS-DOS'\n-517D6B Extract Zip Spec      14 (20) '2.0'\n-517D6C Extract OS            00 (0) 'MS-DOS'\n-517D6D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517D6F Compression Method    0000 (0) 'Stored'\n-517D71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517D75 CRC                   4C048087 (1275363463)\n-517D79 Compressed Size       00000861 (2145)\n-517D7D Uncompressed Size     00000861 (2145)\n-517D81 Filename Length       0073 (115)\n-517D83 Extra Length          0009 (9)\n-517D85 Comment Length        0000 (0)\n-517D87 Disk Start            0000 (0)\n-517D89 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517D8B Ext File Attributes   00000000 (0)\n-517D8F Local Header Offset   0004C907 (313607)\n-517D93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517D93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517E06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517E08   Length              0005 (5)\n-517E0A   Flags               01 (1) 'Modification'\n-517E0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517E0F CENTRAL HEADER #162   02014B50 (33639248)\n-517E13 Created Zip Spec      14 (20) '2.0'\n-517E14 Created OS            00 (0) 'MS-DOS'\n-517E15 Extract Zip Spec      14 (20) '2.0'\n-517E16 Extract OS            00 (0) 'MS-DOS'\n-517E17 General Purpose Flag  0000 (0)\n-517E19 Compression Method    0000 (0) 'Stored'\n-517E1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517E1F CRC                   00000000 (0)\n-517E23 Compressed Size       00000000 (0)\n-517E27 Uncompressed Size     00000000 (0)\n-517E2B Filename Length       002D (45)\n-517E2D Extra Length          0009 (9)\n-517E2F Comment Length        0000 (0)\n-517E31 Disk Start            0000 (0)\n-517E33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517E35 Ext File Attributes   00000000 (0)\n-517E39 Local Header Offset   0004D212 (315922)\n-517E3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517E3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517E6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517E6C   Length              0005 (5)\n-517E6E   Flags               01 (1) 'Modification'\n-517E6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517E73 CENTRAL HEADER #163   02014B50 (33639248)\n-517E77 Created Zip Spec      14 (20) '2.0'\n-517E78 Created OS            00 (0) 'MS-DOS'\n-517E79 Extract Zip Spec      14 (20) '2.0'\n-517E7A Extract OS            00 (0) 'MS-DOS'\n-517E7B General Purpose Flag  0000 (0)\n-517E7D Compression Method    0000 (0) 'Stored'\n-517E7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517E83 CRC                   00000000 (0)\n-517E87 Compressed Size       00000000 (0)\n-517E8B Uncompressed Size     00000000 (0)\n-517E8F Filename Length       0036 (54)\n-517E91 Extra Length          0009 (9)\n-517E93 Comment Length        0000 (0)\n-517E95 Disk Start            0000 (0)\n-517E97 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517E99 Ext File Attributes   00000000 (0)\n-517E9D Local Header Offset   0004D266 (316006)\n-517EA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517EA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517ED7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517ED9   Length              0005 (5)\n-517EDB   Flags               01 (1) 'Modification'\n-517EDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517EE0 CENTRAL HEADER #164   02014B50 (33639248)\n-517EE4 Created Zip Spec      14 (20) '2.0'\n-517EE5 Created OS            00 (0) 'MS-DOS'\n-517EE6 Extract Zip Spec      14 (20) '2.0'\n-517EE7 Extract OS            00 (0) 'MS-DOS'\n-517EE8 General Purpose Flag  0000 (0)\n-517EEA Compression Method    0000 (0) 'Stored'\n-517EEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517EF0 CRC                   00000000 (0)\n-517EF4 Compressed Size       00000000 (0)\n-517EF8 Uncompressed Size     00000000 (0)\n-517EFC Filename Length       006A (106)\n-517EFE Extra Length          0009 (9)\n-517F00 Comment Length        0000 (0)\n-517F02 Disk Start            0000 (0)\n-517F04 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517F06 Ext File Attributes   00000000 (0)\n-517F0A Local Header Offset   0004D2C3 (316099)\n-517F0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517F0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-517F78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-517F7A   Length              0005 (5)\n-517F7C   Flags               01 (1) 'Modification'\n-517F7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-517F81 CENTRAL HEADER #165   02014B50 (33639248)\n-517F85 Created Zip Spec      14 (20) '2.0'\n-517F86 Created OS            00 (0) 'MS-DOS'\n-517F87 Extract Zip Spec      14 (20) '2.0'\n-517F88 Extract OS            00 (0) 'MS-DOS'\n-517F89 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-517F8B Compression Method    0000 (0) 'Stored'\n-517F8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-517F91 CRC                   877B2EE8 (2272997096)\n-517F95 Compressed Size       0000215E (8542)\n-517F99 Uncompressed Size     0000215E (8542)\n-517F9D Filename Length       0080 (128)\n-517F9F Extra Length          0009 (9)\n-517FA1 Comment Length        0000 (0)\n-517FA3 Disk Start            0000 (0)\n-517FA5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-517FA7 Ext File Attributes   00000000 (0)\n-517FAB Local Header Offset   0004D354 (316244)\n-517FAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x517FAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51802F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518031   Length              0005 (5)\n-518033   Flags               01 (1) 'Modification'\n-518034   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518038 CENTRAL HEADER #166   02014B50 (33639248)\n-51803C Created Zip Spec      14 (20) '2.0'\n-51803D Created OS            00 (0) 'MS-DOS'\n-51803E Extract Zip Spec      14 (20) '2.0'\n-51803F Extract OS            00 (0) 'MS-DOS'\n-518040 General Purpose Flag  0000 (0)\n-518042 Compression Method    0000 (0) 'Stored'\n-518044 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518048 CRC                   00000000 (0)\n-51804C Compressed Size       00000000 (0)\n-518050 Uncompressed Size     00000000 (0)\n-518054 Filename Length       006E (110)\n-518056 Extra Length          0009 (9)\n-518058 Comment Length        0000 (0)\n-51805A Disk Start            0000 (0)\n-51805C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51805E Ext File Attributes   00000000 (0)\n-518062 Local Header Offset   0004F569 (324969)\n-518066 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518066: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5180D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5180D6   Length              0005 (5)\n-5180D8   Flags               01 (1) 'Modification'\n-5180D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5180DD CENTRAL HEADER #167   02014B50 (33639248)\n-5180E1 Created Zip Spec      14 (20) '2.0'\n-5180E2 Created OS            00 (0) 'MS-DOS'\n-5180E3 Extract Zip Spec      14 (20) '2.0'\n-5180E4 Extract OS            00 (0) 'MS-DOS'\n-5180E5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5180E7 Compression Method    0000 (0) 'Stored'\n-5180E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5180ED CRC                   E43D22D5 (3829211861)\n-5180F1 Compressed Size       0000147F (5247)\n-5180F5 Uncompressed Size     0000147F (5247)\n-5180F9 Filename Length       0084 (132)\n-5180FB Extra Length          0009 (9)\n-5180FD Comment Length        0000 (0)\n-5180FF Disk Start            0000 (0)\n-518101 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518103 Ext File Attributes   00000000 (0)\n-518107 Local Header Offset   0004F5FE (325118)\n-51810B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+517B84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517B86   Length              0005 (5)\n+517B88   Flags               01 (1) 'Modification'\n+517B89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517B8D CENTRAL HEADER #158   02014B50 (33639248)\n+517B91 Created Zip Spec      14 (20) '2.0'\n+517B92 Created OS            00 (0) 'MS-DOS'\n+517B93 Extract Zip Spec      14 (20) '2.0'\n+517B94 Extract OS            00 (0) 'MS-DOS'\n+517B95 General Purpose Flag  0000 (0)\n+517B97 Compression Method    0000 (0) 'Stored'\n+517B99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517B9D CRC                   00000000 (0)\n+517BA1 Compressed Size       00000000 (0)\n+517BA5 Uncompressed Size     00000000 (0)\n+517BA9 Filename Length       0026 (38)\n+517BAB Extra Length          0009 (9)\n+517BAD Comment Length        0000 (0)\n+517BAF Disk Start            0000 (0)\n+517BB1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517BB3 Ext File Attributes   00000000 (0)\n+517BB7 Local Header Offset   0004C777 (313207)\n+517BBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517BBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517BE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517BE3   Length              0005 (5)\n+517BE5   Flags               01 (1) 'Modification'\n+517BE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517BEA CENTRAL HEADER #159   02014B50 (33639248)\n+517BEE Created Zip Spec      14 (20) '2.0'\n+517BEF Created OS            00 (0) 'MS-DOS'\n+517BF0 Extract Zip Spec      14 (20) '2.0'\n+517BF1 Extract OS            00 (0) 'MS-DOS'\n+517BF2 General Purpose Flag  0000 (0)\n+517BF4 Compression Method    0000 (0) 'Stored'\n+517BF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517BFA CRC                   00000000 (0)\n+517BFE Compressed Size       00000000 (0)\n+517C02 Uncompressed Size     00000000 (0)\n+517C06 Filename Length       002F (47)\n+517C08 Extra Length          0009 (9)\n+517C0A Comment Length        0000 (0)\n+517C0C Disk Start            0000 (0)\n+517C0E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517C10 Ext File Attributes   00000000 (0)\n+517C14 Local Header Offset   0004C7C4 (313284)\n+517C18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517C18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517C47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517C49   Length              0005 (5)\n+517C4B   Flags               01 (1) 'Modification'\n+517C4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517C50 CENTRAL HEADER #160   02014B50 (33639248)\n+517C54 Created Zip Spec      14 (20) '2.0'\n+517C55 Created OS            00 (0) 'MS-DOS'\n+517C56 Extract Zip Spec      14 (20) '2.0'\n+517C57 Extract OS            00 (0) 'MS-DOS'\n+517C58 General Purpose Flag  0000 (0)\n+517C5A Compression Method    0000 (0) 'Stored'\n+517C5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517C60 CRC                   00000000 (0)\n+517C64 Compressed Size       00000000 (0)\n+517C68 Uncompressed Size     00000000 (0)\n+517C6C Filename Length       005D (93)\n+517C6E Extra Length          0009 (9)\n+517C70 Comment Length        0000 (0)\n+517C72 Disk Start            0000 (0)\n+517C74 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517C76 Ext File Attributes   00000000 (0)\n+517C7A Local Header Offset   0004C81A (313370)\n+517C7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517C7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517CDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517CDD   Length              0005 (5)\n+517CDF   Flags               01 (1) 'Modification'\n+517CE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517CE4 CENTRAL HEADER #161   02014B50 (33639248)\n+517CE8 Created Zip Spec      14 (20) '2.0'\n+517CE9 Created OS            00 (0) 'MS-DOS'\n+517CEA Extract Zip Spec      14 (20) '2.0'\n+517CEB Extract OS            00 (0) 'MS-DOS'\n+517CEC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517CEE Compression Method    0000 (0) 'Stored'\n+517CF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517CF4 CRC                   4C048087 (1275363463)\n+517CF8 Compressed Size       00000861 (2145)\n+517CFC Uncompressed Size     00000861 (2145)\n+517D00 Filename Length       0073 (115)\n+517D02 Extra Length          0009 (9)\n+517D04 Comment Length        0000 (0)\n+517D06 Disk Start            0000 (0)\n+517D08 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517D0A Ext File Attributes   00000000 (0)\n+517D0E Local Header Offset   0004C89E (313502)\n+517D12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517D12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517D85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517D87   Length              0005 (5)\n+517D89   Flags               01 (1) 'Modification'\n+517D8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517D8E CENTRAL HEADER #162   02014B50 (33639248)\n+517D92 Created Zip Spec      14 (20) '2.0'\n+517D93 Created OS            00 (0) 'MS-DOS'\n+517D94 Extract Zip Spec      14 (20) '2.0'\n+517D95 Extract OS            00 (0) 'MS-DOS'\n+517D96 General Purpose Flag  0000 (0)\n+517D98 Compression Method    0000 (0) 'Stored'\n+517D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517D9E CRC                   00000000 (0)\n+517DA2 Compressed Size       00000000 (0)\n+517DA6 Uncompressed Size     00000000 (0)\n+517DAA Filename Length       002D (45)\n+517DAC Extra Length          0009 (9)\n+517DAE Comment Length        0000 (0)\n+517DB0 Disk Start            0000 (0)\n+517DB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517DB4 Ext File Attributes   00000000 (0)\n+517DB8 Local Header Offset   0004D1A9 (315817)\n+517DBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517DBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517DE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517DEB   Length              0005 (5)\n+517DED   Flags               01 (1) 'Modification'\n+517DEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517DF2 CENTRAL HEADER #163   02014B50 (33639248)\n+517DF6 Created Zip Spec      14 (20) '2.0'\n+517DF7 Created OS            00 (0) 'MS-DOS'\n+517DF8 Extract Zip Spec      14 (20) '2.0'\n+517DF9 Extract OS            00 (0) 'MS-DOS'\n+517DFA General Purpose Flag  0000 (0)\n+517DFC Compression Method    0000 (0) 'Stored'\n+517DFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517E02 CRC                   00000000 (0)\n+517E06 Compressed Size       00000000 (0)\n+517E0A Uncompressed Size     00000000 (0)\n+517E0E Filename Length       0036 (54)\n+517E10 Extra Length          0009 (9)\n+517E12 Comment Length        0000 (0)\n+517E14 Disk Start            0000 (0)\n+517E16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517E18 Ext File Attributes   00000000 (0)\n+517E1C Local Header Offset   0004D1FD (315901)\n+517E20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517E20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517E56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517E58   Length              0005 (5)\n+517E5A   Flags               01 (1) 'Modification'\n+517E5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517E5F CENTRAL HEADER #164   02014B50 (33639248)\n+517E63 Created Zip Spec      14 (20) '2.0'\n+517E64 Created OS            00 (0) 'MS-DOS'\n+517E65 Extract Zip Spec      14 (20) '2.0'\n+517E66 Extract OS            00 (0) 'MS-DOS'\n+517E67 General Purpose Flag  0000 (0)\n+517E69 Compression Method    0000 (0) 'Stored'\n+517E6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517E6F CRC                   00000000 (0)\n+517E73 Compressed Size       00000000 (0)\n+517E77 Uncompressed Size     00000000 (0)\n+517E7B Filename Length       006A (106)\n+517E7D Extra Length          0009 (9)\n+517E7F Comment Length        0000 (0)\n+517E81 Disk Start            0000 (0)\n+517E83 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517E85 Ext File Attributes   00000000 (0)\n+517E89 Local Header Offset   0004D25A (315994)\n+517E8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517E8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517EF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517EF9   Length              0005 (5)\n+517EFB   Flags               01 (1) 'Modification'\n+517EFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517F00 CENTRAL HEADER #165   02014B50 (33639248)\n+517F04 Created Zip Spec      14 (20) '2.0'\n+517F05 Created OS            00 (0) 'MS-DOS'\n+517F06 Extract Zip Spec      14 (20) '2.0'\n+517F07 Extract OS            00 (0) 'MS-DOS'\n+517F08 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+517F0A Compression Method    0000 (0) 'Stored'\n+517F0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517F10 CRC                   877B2EE8 (2272997096)\n+517F14 Compressed Size       0000215E (8542)\n+517F18 Uncompressed Size     0000215E (8542)\n+517F1C Filename Length       0080 (128)\n+517F1E Extra Length          0009 (9)\n+517F20 Comment Length        0000 (0)\n+517F22 Disk Start            0000 (0)\n+517F24 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517F26 Ext File Attributes   00000000 (0)\n+517F2A Local Header Offset   0004D2EB (316139)\n+517F2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517F2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+517FAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+517FB0   Length              0005 (5)\n+517FB2   Flags               01 (1) 'Modification'\n+517FB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+517FB7 CENTRAL HEADER #166   02014B50 (33639248)\n+517FBB Created Zip Spec      14 (20) '2.0'\n+517FBC Created OS            00 (0) 'MS-DOS'\n+517FBD Extract Zip Spec      14 (20) '2.0'\n+517FBE Extract OS            00 (0) 'MS-DOS'\n+517FBF General Purpose Flag  0000 (0)\n+517FC1 Compression Method    0000 (0) 'Stored'\n+517FC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517FC7 CRC                   00000000 (0)\n+517FCB Compressed Size       00000000 (0)\n+517FCF Uncompressed Size     00000000 (0)\n+517FD3 Filename Length       006E (110)\n+517FD5 Extra Length          0009 (9)\n+517FD7 Comment Length        0000 (0)\n+517FD9 Disk Start            0000 (0)\n+517FDB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+517FDD Ext File Attributes   00000000 (0)\n+517FE1 Local Header Offset   0004F500 (324864)\n+517FE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517FE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518053 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518055   Length              0005 (5)\n+518057   Flags               01 (1) 'Modification'\n+518058   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51805C CENTRAL HEADER #167   02014B50 (33639248)\n+518060 Created Zip Spec      14 (20) '2.0'\n+518061 Created OS            00 (0) 'MS-DOS'\n+518062 Extract Zip Spec      14 (20) '2.0'\n+518063 Extract OS            00 (0) 'MS-DOS'\n+518064 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518066 Compression Method    0000 (0) 'Stored'\n+518068 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51806C CRC                   E43D22D5 (3829211861)\n+518070 Compressed Size       0000147F (5247)\n+518074 Uncompressed Size     0000147F (5247)\n+518078 Filename Length       0084 (132)\n+51807A Extra Length          0009 (9)\n+51807C Comment Length        0000 (0)\n+51807E Disk Start            0000 (0)\n+518080 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518082 Ext File Attributes   00000000 (0)\n+518086 Local Header Offset   0004F595 (325013)\n+51808A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x51810B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51808A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51818F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518191   Length              0005 (5)\n-518193   Flags               01 (1) 'Modification'\n-518194   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518198 CENTRAL HEADER #168   02014B50 (33639248)\n-51819C Created Zip Spec      14 (20) '2.0'\n-51819D Created OS            00 (0) 'MS-DOS'\n-51819E Extract Zip Spec      14 (20) '2.0'\n-51819F Extract OS            00 (0) 'MS-DOS'\n-5181A0 General Purpose Flag  0000 (0)\n-5181A2 Compression Method    0000 (0) 'Stored'\n-5181A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5181A8 CRC                   00000000 (0)\n-5181AC Compressed Size       00000000 (0)\n-5181B0 Uncompressed Size     00000000 (0)\n-5181B4 Filename Length       0060 (96)\n-5181B6 Extra Length          0009 (9)\n-5181B8 Comment Length        0000 (0)\n-5181BA Disk Start            0000 (0)\n-5181BC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5181BE Ext File Attributes   00000000 (0)\n-5181C2 Local Header Offset   00050B38 (330552)\n-5181C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5181C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518226 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518228   Length              0005 (5)\n-51822A   Flags               01 (1) 'Modification'\n-51822B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51822F CENTRAL HEADER #169   02014B50 (33639248)\n-518233 Created Zip Spec      14 (20) '2.0'\n-518234 Created OS            00 (0) 'MS-DOS'\n-518235 Extract Zip Spec      14 (20) '2.0'\n-518236 Extract OS            00 (0) 'MS-DOS'\n-518237 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518239 Compression Method    0000 (0) 'Stored'\n-51823B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51823F CRC                   D765846F (3613754479)\n-518243 Compressed Size       00001060 (4192)\n-518247 Uncompressed Size     00001060 (4192)\n-51824B Filename Length       0076 (118)\n-51824D Extra Length          0009 (9)\n-51824F Comment Length        0000 (0)\n-518251 Disk Start            0000 (0)\n-518253 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518255 Ext File Attributes   00000000 (0)\n-518259 Local Header Offset   00050BBF (330687)\n-51825D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51825D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5182D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5182D5   Length              0005 (5)\n-5182D7   Flags               01 (1) 'Modification'\n-5182D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5182DC CENTRAL HEADER #170   02014B50 (33639248)\n-5182E0 Created Zip Spec      14 (20) '2.0'\n-5182E1 Created OS            00 (0) 'MS-DOS'\n-5182E2 Extract Zip Spec      14 (20) '2.0'\n-5182E3 Extract OS            00 (0) 'MS-DOS'\n-5182E4 General Purpose Flag  0000 (0)\n-5182E6 Compression Method    0000 (0) 'Stored'\n-5182E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5182EC CRC                   00000000 (0)\n-5182F0 Compressed Size       00000000 (0)\n-5182F4 Uncompressed Size     00000000 (0)\n-5182F8 Filename Length       0060 (96)\n-5182FA Extra Length          0009 (9)\n-5182FC Comment Length        0000 (0)\n-5182FE Disk Start            0000 (0)\n-518300 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518302 Ext File Attributes   00000000 (0)\n-518306 Local Header Offset   00051CCC (335052)\n-51830A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51830A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51836A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51836C   Length              0005 (5)\n-51836E   Flags               01 (1) 'Modification'\n-51836F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518373 CENTRAL HEADER #171   02014B50 (33639248)\n-518377 Created Zip Spec      14 (20) '2.0'\n-518378 Created OS            00 (0) 'MS-DOS'\n-518379 Extract Zip Spec      14 (20) '2.0'\n-51837A Extract OS            00 (0) 'MS-DOS'\n-51837B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51837D Compression Method    0000 (0) 'Stored'\n-51837F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518383 CRC                   57E394F3 (1474532595)\n-518387 Compressed Size       0000115C (4444)\n-51838B Uncompressed Size     0000115C (4444)\n-51838F Filename Length       0076 (118)\n-518391 Extra Length          0009 (9)\n-518393 Comment Length        0000 (0)\n-518395 Disk Start            0000 (0)\n-518397 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518399 Ext File Attributes   00000000 (0)\n-51839D Local Header Offset   00051D53 (335187)\n-5183A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5183A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518419   Length              0005 (5)\n-51841B   Flags               01 (1) 'Modification'\n-51841C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518420 CENTRAL HEADER #172   02014B50 (33639248)\n-518424 Created Zip Spec      14 (20) '2.0'\n-518425 Created OS            00 (0) 'MS-DOS'\n-518426 Extract Zip Spec      14 (20) '2.0'\n-518427 Extract OS            00 (0) 'MS-DOS'\n-518428 General Purpose Flag  0000 (0)\n-51842A Compression Method    0000 (0) 'Stored'\n-51842C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518430 CRC                   00000000 (0)\n-518434 Compressed Size       00000000 (0)\n-518438 Uncompressed Size     00000000 (0)\n-51843C Filename Length       0023 (35)\n-51843E Extra Length          0009 (9)\n-518440 Comment Length        0000 (0)\n-518442 Disk Start            0000 (0)\n-518444 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518446 Ext File Attributes   00000000 (0)\n-51844A Local Header Offset   00052F5C (339804)\n-51844E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51844E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518471 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518473   Length              0005 (5)\n-518475   Flags               01 (1) 'Modification'\n-518476   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51847A CENTRAL HEADER #173   02014B50 (33639248)\n-51847E Created Zip Spec      14 (20) '2.0'\n-51847F Created OS            00 (0) 'MS-DOS'\n-518480 Extract Zip Spec      14 (20) '2.0'\n-518481 Extract OS            00 (0) 'MS-DOS'\n-518482 General Purpose Flag  0000 (0)\n-518484 Compression Method    0000 (0) 'Stored'\n-518486 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51848A CRC                   00000000 (0)\n-51848E Compressed Size       00000000 (0)\n-518492 Uncompressed Size     00000000 (0)\n-518496 Filename Length       002C (44)\n-518498 Extra Length          0009 (9)\n-51849A Comment Length        0000 (0)\n-51849C Disk Start            0000 (0)\n-51849E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5184A0 Ext File Attributes   00000000 (0)\n-5184A4 Local Header Offset   00052FA6 (339878)\n-5184A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5184A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5184D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5184D6   Length              0005 (5)\n-5184D8   Flags               01 (1) 'Modification'\n-5184D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5184DD CENTRAL HEADER #174   02014B50 (33639248)\n-5184E1 Created Zip Spec      14 (20) '2.0'\n-5184E2 Created OS            00 (0) 'MS-DOS'\n-5184E3 Extract Zip Spec      14 (20) '2.0'\n-5184E4 Extract OS            00 (0) 'MS-DOS'\n-5184E5 General Purpose Flag  0000 (0)\n-5184E7 Compression Method    0000 (0) 'Stored'\n-5184E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5184ED CRC                   00000000 (0)\n-5184F1 Compressed Size       00000000 (0)\n-5184F5 Uncompressed Size     00000000 (0)\n-5184F9 Filename Length       005E (94)\n-5184FB Extra Length          0009 (9)\n-5184FD Comment Length        0000 (0)\n-5184FF Disk Start            0000 (0)\n-518501 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518503 Ext File Attributes   00000000 (0)\n-518507 Local Header Offset   00052FF9 (339961)\n-51850B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51850B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518569 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51856B   Length              0005 (5)\n-51856D   Flags               01 (1) 'Modification'\n-51856E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518572 CENTRAL HEADER #175   02014B50 (33639248)\n-518576 Created Zip Spec      14 (20) '2.0'\n-518577 Created OS            00 (0) 'MS-DOS'\n-518578 Extract Zip Spec      14 (20) '2.0'\n-518579 Extract OS            00 (0) 'MS-DOS'\n-51857A General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51857C Compression Method    0000 (0) 'Stored'\n-51857E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518582 CRC                   990AFEE4 (2567634660)\n-518586 Compressed Size       00000807 (2055)\n-51858A Uncompressed Size     00000807 (2055)\n-51858E Filename Length       0074 (116)\n-518590 Extra Length          0009 (9)\n-518592 Comment Length        0000 (0)\n-518594 Disk Start            0000 (0)\n-518596 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518598 Ext File Attributes   00000000 (0)\n-51859C Local Header Offset   0005307E (340094)\n-5185A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5185A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518614 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518616   Length              0005 (5)\n-518618   Flags               01 (1) 'Modification'\n-518619   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51861D CENTRAL HEADER #176   02014B50 (33639248)\n-518621 Created Zip Spec      14 (20) '2.0'\n-518622 Created OS            00 (0) 'MS-DOS'\n-518623 Extract Zip Spec      14 (20) '2.0'\n-518624 Extract OS            00 (0) 'MS-DOS'\n-518625 General Purpose Flag  0000 (0)\n-518627 Compression Method    0000 (0) 'Stored'\n-518629 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51862D CRC                   00000000 (0)\n-518631 Compressed Size       00000000 (0)\n-518635 Uncompressed Size     00000000 (0)\n-518639 Filename Length       0028 (40)\n-51863B Extra Length          0009 (9)\n-51863D Comment Length        0000 (0)\n-51863F Disk Start            0000 (0)\n-518641 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518643 Ext File Attributes   00000000 (0)\n-518647 Local Header Offset   00053930 (342320)\n-51864B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51864B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518673 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518675   Length              0005 (5)\n-518677   Flags               01 (1) 'Modification'\n-518678   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51867C CENTRAL HEADER #177   02014B50 (33639248)\n-518680 Created Zip Spec      14 (20) '2.0'\n-518681 Created OS            00 (0) 'MS-DOS'\n-518682 Extract Zip Spec      14 (20) '2.0'\n-518683 Extract OS            00 (0) 'MS-DOS'\n-518684 General Purpose Flag  0000 (0)\n-518686 Compression Method    0000 (0) 'Stored'\n-518688 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51868C CRC                   00000000 (0)\n-518690 Compressed Size       00000000 (0)\n-518694 Uncompressed Size     00000000 (0)\n-518698 Filename Length       0031 (49)\n-51869A Extra Length          0009 (9)\n-51869C Comment Length        0000 (0)\n-51869E Disk Start            0000 (0)\n-5186A0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5186A2 Ext File Attributes   00000000 (0)\n-5186A6 Local Header Offset   0005397F (342399)\n-5186AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5186AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5186DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5186DD   Length              0005 (5)\n-5186DF   Flags               01 (1) 'Modification'\n-5186E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5186E4 CENTRAL HEADER #178   02014B50 (33639248)\n-5186E8 Created Zip Spec      14 (20) '2.0'\n-5186E9 Created OS            00 (0) 'MS-DOS'\n-5186EA Extract Zip Spec      14 (20) '2.0'\n-5186EB Extract OS            00 (0) 'MS-DOS'\n-5186EC General Purpose Flag  0000 (0)\n-5186EE Compression Method    0000 (0) 'Stored'\n-5186F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5186F4 CRC                   00000000 (0)\n-5186F8 Compressed Size       00000000 (0)\n-5186FC Uncompressed Size     00000000 (0)\n-518700 Filename Length       0070 (112)\n-518702 Extra Length          0009 (9)\n-518704 Comment Length        0000 (0)\n-518706 Disk Start            0000 (0)\n-518708 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51870A Ext File Attributes   00000000 (0)\n-51870E Local Header Offset   000539D7 (342487)\n-518712 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518712: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518782 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518784   Length              0005 (5)\n-518786   Flags               01 (1) 'Modification'\n-518787   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51878B CENTRAL HEADER #179   02014B50 (33639248)\n-51878F Created Zip Spec      14 (20) '2.0'\n-518790 Created OS            00 (0) 'MS-DOS'\n-518791 Extract Zip Spec      14 (20) '2.0'\n-518792 Extract OS            00 (0) 'MS-DOS'\n-518793 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518795 Compression Method    0000 (0) 'Stored'\n-518797 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51879B CRC                   F6367964 (4130765156)\n-51879F Compressed Size       00005103 (20739)\n-5187A3 Uncompressed Size     00005103 (20739)\n-5187A7 Filename Length       0086 (134)\n-5187A9 Extra Length          0009 (9)\n-5187AB Comment Length        0000 (0)\n-5187AD Disk Start            0000 (0)\n-5187AF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5187B1 Ext File Attributes   00000000 (0)\n-5187B5 Local Header Offset   00053A6E (342638)\n-5187B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51810E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518110   Length              0005 (5)\n+518112   Flags               01 (1) 'Modification'\n+518113   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518117 CENTRAL HEADER #168   02014B50 (33639248)\n+51811B Created Zip Spec      14 (20) '2.0'\n+51811C Created OS            00 (0) 'MS-DOS'\n+51811D Extract Zip Spec      14 (20) '2.0'\n+51811E Extract OS            00 (0) 'MS-DOS'\n+51811F General Purpose Flag  0000 (0)\n+518121 Compression Method    0000 (0) 'Stored'\n+518123 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518127 CRC                   00000000 (0)\n+51812B Compressed Size       00000000 (0)\n+51812F Uncompressed Size     00000000 (0)\n+518133 Filename Length       0060 (96)\n+518135 Extra Length          0009 (9)\n+518137 Comment Length        0000 (0)\n+518139 Disk Start            0000 (0)\n+51813B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51813D Ext File Attributes   00000000 (0)\n+518141 Local Header Offset   00050ACF (330447)\n+518145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5181A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5181A7   Length              0005 (5)\n+5181A9   Flags               01 (1) 'Modification'\n+5181AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5181AE CENTRAL HEADER #169   02014B50 (33639248)\n+5181B2 Created Zip Spec      14 (20) '2.0'\n+5181B3 Created OS            00 (0) 'MS-DOS'\n+5181B4 Extract Zip Spec      14 (20) '2.0'\n+5181B5 Extract OS            00 (0) 'MS-DOS'\n+5181B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5181B8 Compression Method    0000 (0) 'Stored'\n+5181BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5181BE CRC                   D765846F (3613754479)\n+5181C2 Compressed Size       00001060 (4192)\n+5181C6 Uncompressed Size     00001060 (4192)\n+5181CA Filename Length       0076 (118)\n+5181CC Extra Length          0009 (9)\n+5181CE Comment Length        0000 (0)\n+5181D0 Disk Start            0000 (0)\n+5181D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5181D4 Ext File Attributes   00000000 (0)\n+5181D8 Local Header Offset   00050B56 (330582)\n+5181DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5181DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518252 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518254   Length              0005 (5)\n+518256   Flags               01 (1) 'Modification'\n+518257   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51825B CENTRAL HEADER #170   02014B50 (33639248)\n+51825F Created Zip Spec      14 (20) '2.0'\n+518260 Created OS            00 (0) 'MS-DOS'\n+518261 Extract Zip Spec      14 (20) '2.0'\n+518262 Extract OS            00 (0) 'MS-DOS'\n+518263 General Purpose Flag  0000 (0)\n+518265 Compression Method    0000 (0) 'Stored'\n+518267 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51826B CRC                   00000000 (0)\n+51826F Compressed Size       00000000 (0)\n+518273 Uncompressed Size     00000000 (0)\n+518277 Filename Length       0060 (96)\n+518279 Extra Length          0009 (9)\n+51827B Comment Length        0000 (0)\n+51827D Disk Start            0000 (0)\n+51827F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518281 Ext File Attributes   00000000 (0)\n+518285 Local Header Offset   00051C63 (334947)\n+518289 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518289: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5182E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5182EB   Length              0005 (5)\n+5182ED   Flags               01 (1) 'Modification'\n+5182EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5182F2 CENTRAL HEADER #171   02014B50 (33639248)\n+5182F6 Created Zip Spec      14 (20) '2.0'\n+5182F7 Created OS            00 (0) 'MS-DOS'\n+5182F8 Extract Zip Spec      14 (20) '2.0'\n+5182F9 Extract OS            00 (0) 'MS-DOS'\n+5182FA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5182FC Compression Method    0000 (0) 'Stored'\n+5182FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518302 CRC                   57E394F3 (1474532595)\n+518306 Compressed Size       0000115C (4444)\n+51830A Uncompressed Size     0000115C (4444)\n+51830E Filename Length       0076 (118)\n+518310 Extra Length          0009 (9)\n+518312 Comment Length        0000 (0)\n+518314 Disk Start            0000 (0)\n+518316 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518318 Ext File Attributes   00000000 (0)\n+51831C Local Header Offset   00051CEA (335082)\n+518320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518396 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518398   Length              0005 (5)\n+51839A   Flags               01 (1) 'Modification'\n+51839B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51839F CENTRAL HEADER #172   02014B50 (33639248)\n+5183A3 Created Zip Spec      14 (20) '2.0'\n+5183A4 Created OS            00 (0) 'MS-DOS'\n+5183A5 Extract Zip Spec      14 (20) '2.0'\n+5183A6 Extract OS            00 (0) 'MS-DOS'\n+5183A7 General Purpose Flag  0000 (0)\n+5183A9 Compression Method    0000 (0) 'Stored'\n+5183AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5183AF CRC                   00000000 (0)\n+5183B3 Compressed Size       00000000 (0)\n+5183B7 Uncompressed Size     00000000 (0)\n+5183BB Filename Length       0023 (35)\n+5183BD Extra Length          0009 (9)\n+5183BF Comment Length        0000 (0)\n+5183C1 Disk Start            0000 (0)\n+5183C3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5183C5 Ext File Attributes   00000000 (0)\n+5183C9 Local Header Offset   00052EF3 (339699)\n+5183CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5183CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5183F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5183F2   Length              0005 (5)\n+5183F4   Flags               01 (1) 'Modification'\n+5183F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5183F9 CENTRAL HEADER #173   02014B50 (33639248)\n+5183FD Created Zip Spec      14 (20) '2.0'\n+5183FE Created OS            00 (0) 'MS-DOS'\n+5183FF Extract Zip Spec      14 (20) '2.0'\n+518400 Extract OS            00 (0) 'MS-DOS'\n+518401 General Purpose Flag  0000 (0)\n+518403 Compression Method    0000 (0) 'Stored'\n+518405 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518409 CRC                   00000000 (0)\n+51840D Compressed Size       00000000 (0)\n+518411 Uncompressed Size     00000000 (0)\n+518415 Filename Length       002C (44)\n+518417 Extra Length          0009 (9)\n+518419 Comment Length        0000 (0)\n+51841B Disk Start            0000 (0)\n+51841D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51841F Ext File Attributes   00000000 (0)\n+518423 Local Header Offset   00052F3D (339773)\n+518427 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518427: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518453 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518455   Length              0005 (5)\n+518457   Flags               01 (1) 'Modification'\n+518458   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51845C CENTRAL HEADER #174   02014B50 (33639248)\n+518460 Created Zip Spec      14 (20) '2.0'\n+518461 Created OS            00 (0) 'MS-DOS'\n+518462 Extract Zip Spec      14 (20) '2.0'\n+518463 Extract OS            00 (0) 'MS-DOS'\n+518464 General Purpose Flag  0000 (0)\n+518466 Compression Method    0000 (0) 'Stored'\n+518468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51846C CRC                   00000000 (0)\n+518470 Compressed Size       00000000 (0)\n+518474 Uncompressed Size     00000000 (0)\n+518478 Filename Length       005E (94)\n+51847A Extra Length          0009 (9)\n+51847C Comment Length        0000 (0)\n+51847E Disk Start            0000 (0)\n+518480 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518482 Ext File Attributes   00000000 (0)\n+518486 Local Header Offset   00052F90 (339856)\n+51848A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51848A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5184E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5184EA   Length              0005 (5)\n+5184EC   Flags               01 (1) 'Modification'\n+5184ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5184F1 CENTRAL HEADER #175   02014B50 (33639248)\n+5184F5 Created Zip Spec      14 (20) '2.0'\n+5184F6 Created OS            00 (0) 'MS-DOS'\n+5184F7 Extract Zip Spec      14 (20) '2.0'\n+5184F8 Extract OS            00 (0) 'MS-DOS'\n+5184F9 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5184FB Compression Method    0000 (0) 'Stored'\n+5184FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518501 CRC                   990AFEE4 (2567634660)\n+518505 Compressed Size       00000807 (2055)\n+518509 Uncompressed Size     00000807 (2055)\n+51850D Filename Length       0074 (116)\n+51850F Extra Length          0009 (9)\n+518511 Comment Length        0000 (0)\n+518513 Disk Start            0000 (0)\n+518515 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518517 Ext File Attributes   00000000 (0)\n+51851B Local Header Offset   00053015 (339989)\n+51851F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51851F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518595   Length              0005 (5)\n+518597   Flags               01 (1) 'Modification'\n+518598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51859C CENTRAL HEADER #176   02014B50 (33639248)\n+5185A0 Created Zip Spec      14 (20) '2.0'\n+5185A1 Created OS            00 (0) 'MS-DOS'\n+5185A2 Extract Zip Spec      14 (20) '2.0'\n+5185A3 Extract OS            00 (0) 'MS-DOS'\n+5185A4 General Purpose Flag  0000 (0)\n+5185A6 Compression Method    0000 (0) 'Stored'\n+5185A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5185AC CRC                   00000000 (0)\n+5185B0 Compressed Size       00000000 (0)\n+5185B4 Uncompressed Size     00000000 (0)\n+5185B8 Filename Length       0028 (40)\n+5185BA Extra Length          0009 (9)\n+5185BC Comment Length        0000 (0)\n+5185BE Disk Start            0000 (0)\n+5185C0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5185C2 Ext File Attributes   00000000 (0)\n+5185C6 Local Header Offset   000538C7 (342215)\n+5185CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5185CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5185F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5185F4   Length              0005 (5)\n+5185F6   Flags               01 (1) 'Modification'\n+5185F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5185FB CENTRAL HEADER #177   02014B50 (33639248)\n+5185FF Created Zip Spec      14 (20) '2.0'\n+518600 Created OS            00 (0) 'MS-DOS'\n+518601 Extract Zip Spec      14 (20) '2.0'\n+518602 Extract OS            00 (0) 'MS-DOS'\n+518603 General Purpose Flag  0000 (0)\n+518605 Compression Method    0000 (0) 'Stored'\n+518607 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51860B CRC                   00000000 (0)\n+51860F Compressed Size       00000000 (0)\n+518613 Uncompressed Size     00000000 (0)\n+518617 Filename Length       0031 (49)\n+518619 Extra Length          0009 (9)\n+51861B Comment Length        0000 (0)\n+51861D Disk Start            0000 (0)\n+51861F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518621 Ext File Attributes   00000000 (0)\n+518625 Local Header Offset   00053916 (342294)\n+518629 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518629: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51865A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51865C   Length              0005 (5)\n+51865E   Flags               01 (1) 'Modification'\n+51865F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518663 CENTRAL HEADER #178   02014B50 (33639248)\n+518667 Created Zip Spec      14 (20) '2.0'\n+518668 Created OS            00 (0) 'MS-DOS'\n+518669 Extract Zip Spec      14 (20) '2.0'\n+51866A Extract OS            00 (0) 'MS-DOS'\n+51866B General Purpose Flag  0000 (0)\n+51866D Compression Method    0000 (0) 'Stored'\n+51866F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518673 CRC                   00000000 (0)\n+518677 Compressed Size       00000000 (0)\n+51867B Uncompressed Size     00000000 (0)\n+51867F Filename Length       0070 (112)\n+518681 Extra Length          0009 (9)\n+518683 Comment Length        0000 (0)\n+518685 Disk Start            0000 (0)\n+518687 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518689 Ext File Attributes   00000000 (0)\n+51868D Local Header Offset   0005396E (342382)\n+518691 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518691: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518703   Length              0005 (5)\n+518705   Flags               01 (1) 'Modification'\n+518706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51870A CENTRAL HEADER #179   02014B50 (33639248)\n+51870E Created Zip Spec      14 (20) '2.0'\n+51870F Created OS            00 (0) 'MS-DOS'\n+518710 Extract Zip Spec      14 (20) '2.0'\n+518711 Extract OS            00 (0) 'MS-DOS'\n+518712 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518714 Compression Method    0000 (0) 'Stored'\n+518716 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51871A CRC                   F6367964 (4130765156)\n+51871E Compressed Size       00005103 (20739)\n+518722 Uncompressed Size     00005103 (20739)\n+518726 Filename Length       0086 (134)\n+518728 Extra Length          0009 (9)\n+51872A Comment Length        0000 (0)\n+51872C Disk Start            0000 (0)\n+51872E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518730 Ext File Attributes   00000000 (0)\n+518734 Local Header Offset   00053A05 (342533)\n+518738 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x5187B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x518738: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51883F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518841   Length              0005 (5)\n-518843   Flags               01 (1) 'Modification'\n-518844   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518848 CENTRAL HEADER #180   02014B50 (33639248)\n-51884C Created Zip Spec      14 (20) '2.0'\n-51884D Created OS            00 (0) 'MS-DOS'\n-51884E Extract Zip Spec      14 (20) '2.0'\n-51884F Extract OS            00 (0) 'MS-DOS'\n-518850 General Purpose Flag  0000 (0)\n-518852 Compression Method    0000 (0) 'Stored'\n-518854 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518858 CRC                   00000000 (0)\n-51885C Compressed Size       00000000 (0)\n-518860 Uncompressed Size     00000000 (0)\n-518864 Filename Length       006A (106)\n-518866 Extra Length          0009 (9)\n-518868 Comment Length        0000 (0)\n-51886A Disk Start            0000 (0)\n-51886C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51886E Ext File Attributes   00000000 (0)\n-518872 Local Header Offset   00058C2E (363566)\n-518876 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518876: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5188E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5188E2   Length              0005 (5)\n-5188E4   Flags               01 (1) 'Modification'\n-5188E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5188E9 CENTRAL HEADER #181   02014B50 (33639248)\n-5188ED Created Zip Spec      14 (20) '2.0'\n-5188EE Created OS            00 (0) 'MS-DOS'\n-5188EF Extract Zip Spec      14 (20) '2.0'\n-5188F0 Extract OS            00 (0) 'MS-DOS'\n-5188F1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5188F3 Compression Method    0000 (0) 'Stored'\n-5188F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5188F9 CRC                   9EC902FD (2663973629)\n-5188FD Compressed Size       00003DB9 (15801)\n-518901 Uncompressed Size     00003DB9 (15801)\n-518905 Filename Length       0080 (128)\n-518907 Extra Length          0009 (9)\n-518909 Comment Length        0000 (0)\n-51890B Disk Start            0000 (0)\n-51890D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51890F Ext File Attributes   00000000 (0)\n-518913 Local Header Offset   00058CBF (363711)\n-518917 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518917: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518997 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518999   Length              0005 (5)\n-51899B   Flags               01 (1) 'Modification'\n-51899C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5189A0 CENTRAL HEADER #182   02014B50 (33639248)\n-5189A4 Created Zip Spec      14 (20) '2.0'\n-5189A5 Created OS            00 (0) 'MS-DOS'\n-5189A6 Extract Zip Spec      14 (20) '2.0'\n-5189A7 Extract OS            00 (0) 'MS-DOS'\n-5189A8 General Purpose Flag  0000 (0)\n-5189AA Compression Method    0000 (0) 'Stored'\n-5189AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5189B0 CRC                   00000000 (0)\n-5189B4 Compressed Size       00000000 (0)\n-5189B8 Uncompressed Size     00000000 (0)\n-5189BC Filename Length       0070 (112)\n-5189BE Extra Length          0009 (9)\n-5189C0 Comment Length        0000 (0)\n-5189C2 Disk Start            0000 (0)\n-5189C4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5189C6 Ext File Attributes   00000000 (0)\n-5189CA Local Header Offset   0005CB2F (379695)\n-5189CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5189CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518A3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518A40   Length              0005 (5)\n-518A42   Flags               01 (1) 'Modification'\n-518A43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518A47 CENTRAL HEADER #183   02014B50 (33639248)\n-518A4B Created Zip Spec      14 (20) '2.0'\n-518A4C Created OS            00 (0) 'MS-DOS'\n-518A4D Extract Zip Spec      14 (20) '2.0'\n-518A4E Extract OS            00 (0) 'MS-DOS'\n-518A4F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518A51 Compression Method    0000 (0) 'Stored'\n-518A53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518A57 CRC                   AD150348 (2903835464)\n-518A5B Compressed Size       00009C3D (39997)\n-518A5F Uncompressed Size     00009C3D (39997)\n-518A63 Filename Length       0086 (134)\n-518A65 Extra Length          0009 (9)\n-518A67 Comment Length        0000 (0)\n-518A69 Disk Start            0000 (0)\n-518A6B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518A6D Ext File Attributes   00000000 (0)\n-518A71 Local Header Offset   0005CBC6 (379846)\n-518A75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5187BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5187C0   Length              0005 (5)\n+5187C2   Flags               01 (1) 'Modification'\n+5187C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5187C7 CENTRAL HEADER #180   02014B50 (33639248)\n+5187CB Created Zip Spec      14 (20) '2.0'\n+5187CC Created OS            00 (0) 'MS-DOS'\n+5187CD Extract Zip Spec      14 (20) '2.0'\n+5187CE Extract OS            00 (0) 'MS-DOS'\n+5187CF General Purpose Flag  0000 (0)\n+5187D1 Compression Method    0000 (0) 'Stored'\n+5187D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5187D7 CRC                   00000000 (0)\n+5187DB Compressed Size       00000000 (0)\n+5187DF Uncompressed Size     00000000 (0)\n+5187E3 Filename Length       006A (106)\n+5187E5 Extra Length          0009 (9)\n+5187E7 Comment Length        0000 (0)\n+5187E9 Disk Start            0000 (0)\n+5187EB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5187ED Ext File Attributes   00000000 (0)\n+5187F1 Local Header Offset   00058BC5 (363461)\n+5187F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5187F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51885F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518861   Length              0005 (5)\n+518863   Flags               01 (1) 'Modification'\n+518864   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518868 CENTRAL HEADER #181   02014B50 (33639248)\n+51886C Created Zip Spec      14 (20) '2.0'\n+51886D Created OS            00 (0) 'MS-DOS'\n+51886E Extract Zip Spec      14 (20) '2.0'\n+51886F Extract OS            00 (0) 'MS-DOS'\n+518870 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518872 Compression Method    0000 (0) 'Stored'\n+518874 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518878 CRC                   9EC902FD (2663973629)\n+51887C Compressed Size       00003DB9 (15801)\n+518880 Uncompressed Size     00003DB9 (15801)\n+518884 Filename Length       0080 (128)\n+518886 Extra Length          0009 (9)\n+518888 Comment Length        0000 (0)\n+51888A Disk Start            0000 (0)\n+51888C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51888E Ext File Attributes   00000000 (0)\n+518892 Local Header Offset   00058C56 (363606)\n+518896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518916 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518918   Length              0005 (5)\n+51891A   Flags               01 (1) 'Modification'\n+51891B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51891F CENTRAL HEADER #182   02014B50 (33639248)\n+518923 Created Zip Spec      14 (20) '2.0'\n+518924 Created OS            00 (0) 'MS-DOS'\n+518925 Extract Zip Spec      14 (20) '2.0'\n+518926 Extract OS            00 (0) 'MS-DOS'\n+518927 General Purpose Flag  0000 (0)\n+518929 Compression Method    0000 (0) 'Stored'\n+51892B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51892F CRC                   00000000 (0)\n+518933 Compressed Size       00000000 (0)\n+518937 Uncompressed Size     00000000 (0)\n+51893B Filename Length       0070 (112)\n+51893D Extra Length          0009 (9)\n+51893F Comment Length        0000 (0)\n+518941 Disk Start            0000 (0)\n+518943 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518945 Ext File Attributes   00000000 (0)\n+518949 Local Header Offset   0005CAC6 (379590)\n+51894D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51894D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5189BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5189BF   Length              0005 (5)\n+5189C1   Flags               01 (1) 'Modification'\n+5189C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5189C6 CENTRAL HEADER #183   02014B50 (33639248)\n+5189CA Created Zip Spec      14 (20) '2.0'\n+5189CB Created OS            00 (0) 'MS-DOS'\n+5189CC Extract Zip Spec      14 (20) '2.0'\n+5189CD Extract OS            00 (0) 'MS-DOS'\n+5189CE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5189D0 Compression Method    0000 (0) 'Stored'\n+5189D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5189D6 CRC                   AD150348 (2903835464)\n+5189DA Compressed Size       00009C3D (39997)\n+5189DE Uncompressed Size     00009C3D (39997)\n+5189E2 Filename Length       0086 (134)\n+5189E4 Extra Length          0009 (9)\n+5189E6 Comment Length        0000 (0)\n+5189E8 Disk Start            0000 (0)\n+5189EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5189EC Ext File Attributes   00000000 (0)\n+5189F0 Local Header Offset   0005CB5D (379741)\n+5189F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XX'\n #\n-# WARNING: Offset 0x518A75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5189F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-518AFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518AFD   Length              0005 (5)\n-518AFF   Flags               01 (1) 'Modification'\n-518B00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518B04 CENTRAL HEADER #184   02014B50 (33639248)\n-518B08 Created Zip Spec      14 (20) '2.0'\n-518B09 Created OS            00 (0) 'MS-DOS'\n-518B0A Extract Zip Spec      14 (20) '2.0'\n-518B0B Extract OS            00 (0) 'MS-DOS'\n-518B0C General Purpose Flag  0000 (0)\n-518B0E Compression Method    0000 (0) 'Stored'\n-518B10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518B14 CRC                   00000000 (0)\n-518B18 Compressed Size       00000000 (0)\n-518B1C Uncompressed Size     00000000 (0)\n-518B20 Filename Length       006A (106)\n-518B22 Extra Length          0009 (9)\n-518B24 Comment Length        0000 (0)\n-518B26 Disk Start            0000 (0)\n-518B28 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518B2A Ext File Attributes   00000000 (0)\n-518B2E Local Header Offset   000668C0 (420032)\n-518B32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518B32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518B9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518B9E   Length              0005 (5)\n-518BA0   Flags               01 (1) 'Modification'\n-518BA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518BA5 CENTRAL HEADER #185   02014B50 (33639248)\n-518BA9 Created Zip Spec      14 (20) '2.0'\n-518BAA Created OS            00 (0) 'MS-DOS'\n-518BAB Extract Zip Spec      14 (20) '2.0'\n-518BAC Extract OS            00 (0) 'MS-DOS'\n-518BAD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518BAF Compression Method    0000 (0) 'Stored'\n-518BB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518BB5 CRC                   8BF94713 (2348369683)\n-518BB9 Compressed Size       00002C4C (11340)\n-518BBD Uncompressed Size     00002C4C (11340)\n-518BC1 Filename Length       0080 (128)\n-518BC3 Extra Length          0009 (9)\n-518BC5 Comment Length        0000 (0)\n-518BC7 Disk Start            0000 (0)\n-518BC9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518BCB Ext File Attributes   00000000 (0)\n-518BCF Local Header Offset   00066951 (420177)\n-518BD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518BD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518C53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518C55   Length              0005 (5)\n-518C57   Flags               01 (1) 'Modification'\n-518C58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518C5C CENTRAL HEADER #186   02014B50 (33639248)\n-518C60 Created Zip Spec      14 (20) '2.0'\n-518C61 Created OS            00 (0) 'MS-DOS'\n-518C62 Extract Zip Spec      14 (20) '2.0'\n-518C63 Extract OS            00 (0) 'MS-DOS'\n-518C64 General Purpose Flag  0000 (0)\n-518C66 Compression Method    0000 (0) 'Stored'\n-518C68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518C6C CRC                   00000000 (0)\n-518C70 Compressed Size       00000000 (0)\n-518C74 Uncompressed Size     00000000 (0)\n-518C78 Filename Length       002E (46)\n-518C7A Extra Length          0009 (9)\n-518C7C Comment Length        0000 (0)\n-518C7E Disk Start            0000 (0)\n-518C80 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518C82 Ext File Attributes   00000000 (0)\n-518C86 Local Header Offset   00069654 (431700)\n-518C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518CB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518CBA   Length              0005 (5)\n-518CBC   Flags               01 (1) 'Modification'\n-518CBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518CC1 CENTRAL HEADER #187   02014B50 (33639248)\n-518CC5 Created Zip Spec      14 (20) '2.0'\n-518CC6 Created OS            00 (0) 'MS-DOS'\n-518CC7 Extract Zip Spec      14 (20) '2.0'\n-518CC8 Extract OS            00 (0) 'MS-DOS'\n-518CC9 General Purpose Flag  0000 (0)\n-518CCB Compression Method    0000 (0) 'Stored'\n-518CCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518CD1 CRC                   00000000 (0)\n-518CD5 Compressed Size       00000000 (0)\n-518CD9 Uncompressed Size     00000000 (0)\n-518CDD Filename Length       0037 (55)\n-518CDF Extra Length          0009 (9)\n-518CE1 Comment Length        0000 (0)\n-518CE3 Disk Start            0000 (0)\n-518CE5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518CE7 Ext File Attributes   00000000 (0)\n-518CEB Local Header Offset   000696A9 (431785)\n-518CEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518CEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518D26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518D28   Length              0005 (5)\n-518D2A   Flags               01 (1) 'Modification'\n-518D2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518D2F CENTRAL HEADER #188   02014B50 (33639248)\n-518D33 Created Zip Spec      14 (20) '2.0'\n-518D34 Created OS            00 (0) 'MS-DOS'\n-518D35 Extract Zip Spec      14 (20) '2.0'\n-518D36 Extract OS            00 (0) 'MS-DOS'\n-518D37 General Purpose Flag  0000 (0)\n-518D39 Compression Method    0000 (0) 'Stored'\n-518D3B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518D3F CRC                   00000000 (0)\n-518D43 Compressed Size       00000000 (0)\n-518D47 Uncompressed Size     00000000 (0)\n-518D4B Filename Length       0060 (96)\n-518D4D Extra Length          0009 (9)\n-518D4F Comment Length        0000 (0)\n-518D51 Disk Start            0000 (0)\n-518D53 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518D55 Ext File Attributes   00000000 (0)\n-518D59 Local Header Offset   00069707 (431879)\n-518D5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518D5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518DBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518DBF   Length              0005 (5)\n-518DC1   Flags               01 (1) 'Modification'\n-518DC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518DC6 CENTRAL HEADER #189   02014B50 (33639248)\n-518DCA Created Zip Spec      14 (20) '2.0'\n-518DCB Created OS            00 (0) 'MS-DOS'\n-518DCC Extract Zip Spec      14 (20) '2.0'\n-518DCD Extract OS            00 (0) 'MS-DOS'\n-518DCE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518DD0 Compression Method    0000 (0) 'Stored'\n-518DD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518DD6 CRC                   42E654D4 (1122391252)\n-518DDA Compressed Size       00000EFA (3834)\n-518DDE Uncompressed Size     00000EFA (3834)\n-518DE2 Filename Length       0076 (118)\n-518DE4 Extra Length          0009 (9)\n-518DE6 Comment Length        0000 (0)\n-518DE8 Disk Start            0000 (0)\n-518DEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518DEC Ext File Attributes   00000000 (0)\n-518DF0 Local Header Offset   0006978E (432014)\n-518DF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518DF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518E6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518E6C   Length              0005 (5)\n-518E6E   Flags               01 (1) 'Modification'\n-518E6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518E73 CENTRAL HEADER #190   02014B50 (33639248)\n-518E77 Created Zip Spec      14 (20) '2.0'\n-518E78 Created OS            00 (0) 'MS-DOS'\n-518E79 Extract Zip Spec      14 (20) '2.0'\n-518E7A Extract OS            00 (0) 'MS-DOS'\n-518E7B General Purpose Flag  0000 (0)\n-518E7D Compression Method    0000 (0) 'Stored'\n-518E7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518E83 CRC                   00000000 (0)\n-518E87 Compressed Size       00000000 (0)\n-518E8B Uncompressed Size     00000000 (0)\n-518E8F Filename Length       0066 (102)\n-518E91 Extra Length          0009 (9)\n-518E93 Comment Length        0000 (0)\n-518E95 Disk Start            0000 (0)\n-518E97 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518E99 Ext File Attributes   00000000 (0)\n-518E9D Local Header Offset   0006A735 (436021)\n-518EA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518EA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518F09   Length              0005 (5)\n-518F0B   Flags               01 (1) 'Modification'\n-518F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518F10 CENTRAL HEADER #191   02014B50 (33639248)\n-518F14 Created Zip Spec      14 (20) '2.0'\n-518F15 Created OS            00 (0) 'MS-DOS'\n-518F16 Extract Zip Spec      14 (20) '2.0'\n-518F17 Extract OS            00 (0) 'MS-DOS'\n-518F18 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-518F1A Compression Method    0000 (0) 'Stored'\n-518F1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518F20 CRC                   51B4F745 (1370814277)\n-518F24 Compressed Size       000016D7 (5847)\n-518F28 Uncompressed Size     000016D7 (5847)\n-518F2C Filename Length       007C (124)\n-518F2E Extra Length          0009 (9)\n-518F30 Comment Length        0000 (0)\n-518F32 Disk Start            0000 (0)\n-518F34 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518F36 Ext File Attributes   00000000 (0)\n-518F3A Local Header Offset   0006A7C2 (436162)\n-518F3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518F3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-518FBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-518FBC   Length              0005 (5)\n-518FBE   Flags               01 (1) 'Modification'\n-518FBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-518FC3 CENTRAL HEADER #192   02014B50 (33639248)\n-518FC7 Created Zip Spec      14 (20) '2.0'\n-518FC8 Created OS            00 (0) 'MS-DOS'\n-518FC9 Extract Zip Spec      14 (20) '2.0'\n-518FCA Extract OS            00 (0) 'MS-DOS'\n-518FCB General Purpose Flag  0000 (0)\n-518FCD Compression Method    0000 (0) 'Stored'\n-518FCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-518FD3 CRC                   00000000 (0)\n-518FD7 Compressed Size       00000000 (0)\n-518FDB Uncompressed Size     00000000 (0)\n-518FDF Filename Length       0026 (38)\n-518FE1 Extra Length          0009 (9)\n-518FE3 Comment Length        0000 (0)\n-518FE5 Disk Start            0000 (0)\n-518FE7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-518FE9 Ext File Attributes   00000000 (0)\n-518FED Local Header Offset   0006BF4C (442188)\n-518FF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x518FF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519017 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519019   Length              0005 (5)\n-51901B   Flags               01 (1) 'Modification'\n-51901C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519020 CENTRAL HEADER #193   02014B50 (33639248)\n-519024 Created Zip Spec      14 (20) '2.0'\n-519025 Created OS            00 (0) 'MS-DOS'\n-519026 Extract Zip Spec      14 (20) '2.0'\n-519027 Extract OS            00 (0) 'MS-DOS'\n-519028 General Purpose Flag  0000 (0)\n-51902A Compression Method    0000 (0) 'Stored'\n-51902C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519030 CRC                   00000000 (0)\n-519034 Compressed Size       00000000 (0)\n-519038 Uncompressed Size     00000000 (0)\n-51903C Filename Length       002F (47)\n-51903E Extra Length          0009 (9)\n-519040 Comment Length        0000 (0)\n-519042 Disk Start            0000 (0)\n-519044 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519046 Ext File Attributes   00000000 (0)\n-51904A Local Header Offset   0006BF99 (442265)\n-51904E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51904E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51907D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51907F   Length              0005 (5)\n-519081   Flags               01 (1) 'Modification'\n-519082   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519086 CENTRAL HEADER #194   02014B50 (33639248)\n-51908A Created Zip Spec      14 (20) '2.0'\n-51908B Created OS            00 (0) 'MS-DOS'\n-51908C Extract Zip Spec      14 (20) '2.0'\n-51908D Extract OS            00 (0) 'MS-DOS'\n-51908E General Purpose Flag  0000 (0)\n-519090 Compression Method    0000 (0) 'Stored'\n-519092 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519096 CRC                   00000000 (0)\n-51909A Compressed Size       00000000 (0)\n-51909E Uncompressed Size     00000000 (0)\n-5190A2 Filename Length       005E (94)\n-5190A4 Extra Length          0009 (9)\n-5190A6 Comment Length        0000 (0)\n-5190A8 Disk Start            0000 (0)\n-5190AA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5190AC Ext File Attributes   00000000 (0)\n-5190B0 Local Header Offset   0006BFEF (442351)\n-5190B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5190B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519112 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519114   Length              0005 (5)\n-519116   Flags               01 (1) 'Modification'\n-519117   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51911B CENTRAL HEADER #195   02014B50 (33639248)\n-51911F Created Zip Spec      14 (20) '2.0'\n-519120 Created OS            00 (0) 'MS-DOS'\n-519121 Extract Zip Spec      14 (20) '2.0'\n-519122 Extract OS            00 (0) 'MS-DOS'\n-519123 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519125 Compression Method    0000 (0) 'Stored'\n-519127 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51912B CRC                   357DA477 (897426551)\n-51912F Compressed Size       000006C6 (1734)\n-519133 Uncompressed Size     000006C6 (1734)\n-519137 Filename Length       0074 (116)\n-519139 Extra Length          0009 (9)\n-51913B Comment Length        0000 (0)\n-51913D Disk Start            0000 (0)\n-51913F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519141 Ext File Attributes   00000000 (0)\n-519145 Local Header Offset   0006C074 (442484)\n-519149 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519149: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5191BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5191BF   Length              0005 (5)\n-5191C1   Flags               01 (1) 'Modification'\n-5191C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5191C6 CENTRAL HEADER #196   02014B50 (33639248)\n-5191CA Created Zip Spec      14 (20) '2.0'\n-5191CB Created OS            00 (0) 'MS-DOS'\n-5191CC Extract Zip Spec      14 (20) '2.0'\n-5191CD Extract OS            00 (0) 'MS-DOS'\n-5191CE General Purpose Flag  0000 (0)\n-5191D0 Compression Method    0000 (0) 'Stored'\n-5191D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5191D6 CRC                   00000000 (0)\n-5191DA Compressed Size       00000000 (0)\n-5191DE Uncompressed Size     00000000 (0)\n-5191E2 Filename Length       005B (91)\n-5191E4 Extra Length          0009 (9)\n-5191E6 Comment Length        0000 (0)\n-5191E8 Disk Start            0000 (0)\n-5191EA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5191EC Ext File Attributes   00000000 (0)\n-5191F0 Local Header Offset   0006C7E5 (444389)\n-5191F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5191F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51924F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519251   Length              0005 (5)\n-519253   Flags               01 (1) 'Modification'\n-519254   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519258 CENTRAL HEADER #197   02014B50 (33639248)\n-51925C Created Zip Spec      14 (20) '2.0'\n-51925D Created OS            00 (0) 'MS-DOS'\n-51925E Extract Zip Spec      14 (20) '2.0'\n-51925F Extract OS            00 (0) 'MS-DOS'\n-519260 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519262 Compression Method    0000 (0) 'Stored'\n-519264 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519268 CRC                   F9CAC97B (4190816635)\n-51926C Compressed Size       000009BC (2492)\n-519270 Uncompressed Size     000009BC (2492)\n-519274 Filename Length       0071 (113)\n-519276 Extra Length          0009 (9)\n-519278 Comment Length        0000 (0)\n-51927A Disk Start            0000 (0)\n-51927C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51927E Ext File Attributes   00000000 (0)\n-519282 Local Header Offset   0006C867 (444519)\n-519286 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519286: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5192F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5192F9   Length              0005 (5)\n-5192FB   Flags               01 (1) 'Modification'\n-5192FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519300 CENTRAL HEADER #198   02014B50 (33639248)\n-519304 Created Zip Spec      14 (20) '2.0'\n-519305 Created OS            00 (0) 'MS-DOS'\n-519306 Extract Zip Spec      14 (20) '2.0'\n-519307 Extract OS            00 (0) 'MS-DOS'\n-519308 General Purpose Flag  0000 (0)\n-51930A Compression Method    0000 (0) 'Stored'\n-51930C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519310 CRC                   00000000 (0)\n-519314 Compressed Size       00000000 (0)\n-519318 Uncompressed Size     00000000 (0)\n-51931C Filename Length       0061 (97)\n-51931E Extra Length          0009 (9)\n-519320 Comment Length        0000 (0)\n-519322 Disk Start            0000 (0)\n-519324 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519326 Ext File Attributes   00000000 (0)\n-51932A Local Header Offset   0006D2CB (447179)\n-51932E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51932E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51938F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519391   Length              0005 (5)\n-519393   Flags               01 (1) 'Modification'\n-519394   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519398 CENTRAL HEADER #199   02014B50 (33639248)\n-51939C Created Zip Spec      14 (20) '2.0'\n-51939D Created OS            00 (0) 'MS-DOS'\n-51939E Extract Zip Spec      14 (20) '2.0'\n-51939F Extract OS            00 (0) 'MS-DOS'\n-5193A0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5193A2 Compression Method    0000 (0) 'Stored'\n-5193A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5193A8 CRC                   9DEB8C8B (2649459851)\n-5193AC Compressed Size       00000A07 (2567)\n-5193B0 Uncompressed Size     00000A07 (2567)\n-5193B4 Filename Length       0077 (119)\n-5193B6 Extra Length          0009 (9)\n-5193B8 Comment Length        0000 (0)\n-5193BA Disk Start            0000 (0)\n-5193BC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5193BE Ext File Attributes   00000000 (0)\n-5193C2 Local Header Offset   0006D353 (447315)\n-5193C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5193C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51943D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51943F   Length              0005 (5)\n-519441   Flags               01 (1) 'Modification'\n-519442   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519446 CENTRAL HEADER #200   02014B50 (33639248)\n-51944A Created Zip Spec      14 (20) '2.0'\n-51944B Created OS            00 (0) 'MS-DOS'\n-51944C Extract Zip Spec      14 (20) '2.0'\n-51944D Extract OS            00 (0) 'MS-DOS'\n-51944E General Purpose Flag  0000 (0)\n-519450 Compression Method    0000 (0) 'Stored'\n-519452 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519456 CRC                   00000000 (0)\n-51945A Compressed Size       00000000 (0)\n-51945E Uncompressed Size     00000000 (0)\n-519462 Filename Length       005B (91)\n-519464 Extra Length          0009 (9)\n-519466 Comment Length        0000 (0)\n-519468 Disk Start            0000 (0)\n-51946A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51946C Ext File Attributes   00000000 (0)\n-519470 Local Header Offset   0006DE08 (450056)\n-519474 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519474: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5194CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5194D1   Length              0005 (5)\n-5194D3   Flags               01 (1) 'Modification'\n-5194D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5194D8 CENTRAL HEADER #201   02014B50 (33639248)\n-5194DC Created Zip Spec      14 (20) '2.0'\n-5194DD Created OS            00 (0) 'MS-DOS'\n-5194DE Extract Zip Spec      14 (20) '2.0'\n-5194DF Extract OS            00 (0) 'MS-DOS'\n-5194E0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5194E2 Compression Method    0000 (0) 'Stored'\n-5194E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5194E8 CRC                   85B17459 (2242999385)\n-5194EC Compressed Size       00000DDE (3550)\n-5194F0 Uncompressed Size     00000DDE (3550)\n-5194F4 Filename Length       0071 (113)\n-5194F6 Extra Length          0009 (9)\n-5194F8 Comment Length        0000 (0)\n-5194FA Disk Start            0000 (0)\n-5194FC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5194FE Ext File Attributes   00000000 (0)\n-519502 Local Header Offset   0006DE8A (450186)\n-519506 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519506: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519577 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519579   Length              0005 (5)\n-51957B   Flags               01 (1) 'Modification'\n-51957C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519580 CENTRAL HEADER #202   02014B50 (33639248)\n-519584 Created Zip Spec      14 (20) '2.0'\n-519585 Created OS            00 (0) 'MS-DOS'\n-519586 Extract Zip Spec      14 (20) '2.0'\n-519587 Extract OS            00 (0) 'MS-DOS'\n-519588 General Purpose Flag  0000 (0)\n-51958A Compression Method    0000 (0) 'Stored'\n-51958C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519590 CRC                   00000000 (0)\n-519594 Compressed Size       00000000 (0)\n-519598 Uncompressed Size     00000000 (0)\n-51959C Filename Length       0066 (102)\n-51959E Extra Length          0009 (9)\n-5195A0 Comment Length        0000 (0)\n-5195A2 Disk Start            0000 (0)\n-5195A4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5195A6 Ext File Attributes   00000000 (0)\n-5195AA Local Header Offset   0006ED10 (453904)\n-5195AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5195AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519614 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519616   Length              0005 (5)\n-519618   Flags               01 (1) 'Modification'\n-519619   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51961D CENTRAL HEADER #203   02014B50 (33639248)\n-519621 Created Zip Spec      14 (20) '2.0'\n-519622 Created OS            00 (0) 'MS-DOS'\n-519623 Extract Zip Spec      14 (20) '2.0'\n-519624 Extract OS            00 (0) 'MS-DOS'\n-519625 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519627 Compression Method    0000 (0) 'Stored'\n-519629 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51962D CRC                   9C229073 (2619510899)\n-519631 Compressed Size       000005CF (1487)\n-519635 Uncompressed Size     000005CF (1487)\n-519639 Filename Length       007C (124)\n-51963B Extra Length          0009 (9)\n-51963D Comment Length        0000 (0)\n-51963F Disk Start            0000 (0)\n-519641 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519643 Ext File Attributes   00000000 (0)\n-519647 Local Header Offset   0006ED9D (454045)\n-51964B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51964B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5196C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5196C9   Length              0005 (5)\n-5196CB   Flags               01 (1) 'Modification'\n-5196CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5196D0 CENTRAL HEADER #204   02014B50 (33639248)\n-5196D4 Created Zip Spec      14 (20) '2.0'\n-5196D5 Created OS            00 (0) 'MS-DOS'\n-5196D6 Extract Zip Spec      14 (20) '2.0'\n-5196D7 Extract OS            00 (0) 'MS-DOS'\n-5196D8 General Purpose Flag  0000 (0)\n-5196DA Compression Method    0000 (0) 'Stored'\n-5196DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5196E0 CRC                   00000000 (0)\n-5196E4 Compressed Size       00000000 (0)\n-5196E8 Uncompressed Size     00000000 (0)\n-5196EC Filename Length       0066 (102)\n-5196EE Extra Length          0009 (9)\n-5196F0 Comment Length        0000 (0)\n-5196F2 Disk Start            0000 (0)\n-5196F4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5196F6 Ext File Attributes   00000000 (0)\n-5196FA Local Header Offset   0006F41F (455711)\n-5196FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5196FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519764 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519766   Length              0005 (5)\n-519768   Flags               01 (1) 'Modification'\n-519769   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51976D CENTRAL HEADER #205   02014B50 (33639248)\n-519771 Created Zip Spec      14 (20) '2.0'\n-519772 Created OS            00 (0) 'MS-DOS'\n-519773 Extract Zip Spec      14 (20) '2.0'\n-519774 Extract OS            00 (0) 'MS-DOS'\n-519775 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519777 Compression Method    0000 (0) 'Stored'\n-519779 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51977D CRC                   A57691CD (2776011213)\n-519781 Compressed Size       000005C2 (1474)\n-519785 Uncompressed Size     000005C2 (1474)\n-519789 Filename Length       007C (124)\n-51978B Extra Length          0009 (9)\n-51978D Comment Length        0000 (0)\n-51978F Disk Start            0000 (0)\n-519791 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519793 Ext File Attributes   00000000 (0)\n-519797 Local Header Offset   0006F4AC (455852)\n-51979B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51979B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519817 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519819   Length              0005 (5)\n-51981B   Flags               01 (1) 'Modification'\n-51981C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519820 CENTRAL HEADER #206   02014B50 (33639248)\n-519824 Created Zip Spec      14 (20) '2.0'\n-519825 Created OS            00 (0) 'MS-DOS'\n-519826 Extract Zip Spec      14 (20) '2.0'\n-519827 Extract OS            00 (0) 'MS-DOS'\n-519828 General Purpose Flag  0000 (0)\n-51982A Compression Method    0000 (0) 'Stored'\n-51982C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519830 CRC                   00000000 (0)\n-519834 Compressed Size       00000000 (0)\n-519838 Uncompressed Size     00000000 (0)\n-51983C Filename Length       0065 (101)\n-51983E Extra Length          0009 (9)\n-519840 Comment Length        0000 (0)\n-519842 Disk Start            0000 (0)\n-519844 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519846 Ext File Attributes   00000000 (0)\n-51984A Local Header Offset   0006FB21 (457505)\n-51984E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51984E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5198B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5198B5   Length              0005 (5)\n-5198B7   Flags               01 (1) 'Modification'\n-5198B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5198BC CENTRAL HEADER #207   02014B50 (33639248)\n-5198C0 Created Zip Spec      14 (20) '2.0'\n-5198C1 Created OS            00 (0) 'MS-DOS'\n-5198C2 Extract Zip Spec      14 (20) '2.0'\n-5198C3 Extract OS            00 (0) 'MS-DOS'\n-5198C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5198C6 Compression Method    0000 (0) 'Stored'\n-5198C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5198CC CRC                   6CD31445 (1825772613)\n-5198D0 Compressed Size       0000073A (1850)\n-5198D4 Uncompressed Size     0000073A (1850)\n-5198D8 Filename Length       007B (123)\n-5198DA Extra Length          0009 (9)\n-5198DC Comment Length        0000 (0)\n-5198DE Disk Start            0000 (0)\n-5198E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5198E2 Ext File Attributes   00000000 (0)\n-5198E6 Local Header Offset   0006FBAD (457645)\n-5198EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5198EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519965 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519967   Length              0005 (5)\n-519969   Flags               01 (1) 'Modification'\n-51996A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51996E CENTRAL HEADER #208   02014B50 (33639248)\n-519972 Created Zip Spec      14 (20) '2.0'\n-519973 Created OS            00 (0) 'MS-DOS'\n-519974 Extract Zip Spec      14 (20) '2.0'\n-519975 Extract OS            00 (0) 'MS-DOS'\n-519976 General Purpose Flag  0000 (0)\n-519978 Compression Method    0000 (0) 'Stored'\n-51997A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51997E CRC                   00000000 (0)\n-519982 Compressed Size       00000000 (0)\n-519986 Uncompressed Size     00000000 (0)\n-51998A Filename Length       0063 (99)\n-51998C Extra Length          0009 (9)\n-51998E Comment Length        0000 (0)\n-519990 Disk Start            0000 (0)\n-519992 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519994 Ext File Attributes   00000000 (0)\n-519998 Local Header Offset   00070399 (459673)\n-51999C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51999C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5199FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519A01   Length              0005 (5)\n-519A03   Flags               01 (1) 'Modification'\n-519A04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519A08 CENTRAL HEADER #209   02014B50 (33639248)\n-519A0C Created Zip Spec      14 (20) '2.0'\n-519A0D Created OS            00 (0) 'MS-DOS'\n-519A0E Extract Zip Spec      14 (20) '2.0'\n-519A0F Extract OS            00 (0) 'MS-DOS'\n-519A10 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519A12 Compression Method    0000 (0) 'Stored'\n-519A14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519A18 CRC                   C97DF8D6 (3380476118)\n-519A1C Compressed Size       00000A92 (2706)\n-519A20 Uncompressed Size     00000A92 (2706)\n-519A24 Filename Length       0079 (121)\n-519A26 Extra Length          0009 (9)\n-519A28 Comment Length        0000 (0)\n-519A2A Disk Start            0000 (0)\n-519A2C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519A2E Ext File Attributes   00000000 (0)\n-519A32 Local Header Offset   00070423 (459811)\n-519A36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519A36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519AAF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519AB1   Length              0005 (5)\n-519AB3   Flags               01 (1) 'Modification'\n-519AB4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519AB8 CENTRAL HEADER #210   02014B50 (33639248)\n-519ABC Created Zip Spec      14 (20) '2.0'\n-519ABD Created OS            00 (0) 'MS-DOS'\n-519ABE Extract Zip Spec      14 (20) '2.0'\n-519ABF Extract OS            00 (0) 'MS-DOS'\n-519AC0 General Purpose Flag  0000 (0)\n-519AC2 Compression Method    0000 (0) 'Stored'\n-519AC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519AC8 CRC                   00000000 (0)\n-519ACC Compressed Size       00000000 (0)\n-519AD0 Uncompressed Size     00000000 (0)\n-519AD4 Filename Length       0023 (35)\n-519AD6 Extra Length          0009 (9)\n-519AD8 Comment Length        0000 (0)\n-519ADA Disk Start            0000 (0)\n-519ADC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519ADE Ext File Attributes   00000000 (0)\n-519AE2 Local Header Offset   00070F65 (462693)\n-519AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519B09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519B0B   Length              0005 (5)\n-519B0D   Flags               01 (1) 'Modification'\n-519B0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519B12 CENTRAL HEADER #211   02014B50 (33639248)\n-519B16 Created Zip Spec      14 (20) '2.0'\n-519B17 Created OS            00 (0) 'MS-DOS'\n-519B18 Extract Zip Spec      14 (20) '2.0'\n-519B19 Extract OS            00 (0) 'MS-DOS'\n-519B1A General Purpose Flag  0000 (0)\n-519B1C Compression Method    0000 (0) 'Stored'\n-519B1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519B22 CRC                   00000000 (0)\n-519B26 Compressed Size       00000000 (0)\n-519B2A Uncompressed Size     00000000 (0)\n-519B2E Filename Length       002C (44)\n-519B30 Extra Length          0009 (9)\n-519B32 Comment Length        0000 (0)\n-519B34 Disk Start            0000 (0)\n-519B36 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519B38 Ext File Attributes   00000000 (0)\n-519B3C Local Header Offset   00070FAF (462767)\n-519B40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519B40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519B6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519B6E   Length              0005 (5)\n-519B70   Flags               01 (1) 'Modification'\n-519B71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519B75 CENTRAL HEADER #212   02014B50 (33639248)\n-519B79 Created Zip Spec      14 (20) '2.0'\n-519B7A Created OS            00 (0) 'MS-DOS'\n-519B7B Extract Zip Spec      14 (20) '2.0'\n-519B7C Extract OS            00 (0) 'MS-DOS'\n-519B7D General Purpose Flag  0000 (0)\n-519B7F Compression Method    0000 (0) 'Stored'\n-519B81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519B85 CRC                   00000000 (0)\n-519B89 Compressed Size       00000000 (0)\n-519B8D Uncompressed Size     00000000 (0)\n-519B91 Filename Length       0058 (88)\n-519B93 Extra Length          0009 (9)\n-519B95 Comment Length        0000 (0)\n-519B97 Disk Start            0000 (0)\n-519B99 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519B9B Ext File Attributes   00000000 (0)\n-519B9F Local Header Offset   00071002 (462850)\n-519BA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519BA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519BFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519BFD   Length              0005 (5)\n-519BFF   Flags               01 (1) 'Modification'\n-519C00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519C04 CENTRAL HEADER #213   02014B50 (33639248)\n-519C08 Created Zip Spec      14 (20) '2.0'\n-519C09 Created OS            00 (0) 'MS-DOS'\n-519C0A Extract Zip Spec      14 (20) '2.0'\n-519C0B Extract OS            00 (0) 'MS-DOS'\n-519C0C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519C0E Compression Method    0000 (0) 'Stored'\n-519C10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519C14 CRC                   0B04A112 (184852754)\n-519C18 Compressed Size       00000795 (1941)\n-519C1C Uncompressed Size     00000795 (1941)\n-519C20 Filename Length       006E (110)\n-519C22 Extra Length          0009 (9)\n-519C24 Comment Length        0000 (0)\n-519C26 Disk Start            0000 (0)\n-519C28 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519C2A Ext File Attributes   00000000 (0)\n-519C2E Local Header Offset   00071081 (462977)\n-519C32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519C32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519CA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519CA2   Length              0005 (5)\n-519CA4   Flags               01 (1) 'Modification'\n-519CA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519CA9 CENTRAL HEADER #214   02014B50 (33639248)\n-519CAD Created Zip Spec      14 (20) '2.0'\n-519CAE Created OS            00 (0) 'MS-DOS'\n-519CAF Extract Zip Spec      14 (20) '2.0'\n-519CB0 Extract OS            00 (0) 'MS-DOS'\n-519CB1 General Purpose Flag  0000 (0)\n-519CB3 Compression Method    0000 (0) 'Stored'\n-519CB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519CB9 CRC                   00000000 (0)\n-519CBD Compressed Size       00000000 (0)\n-519CC1 Uncompressed Size     00000000 (0)\n-519CC5 Filename Length       0031 (49)\n-519CC7 Extra Length          0009 (9)\n-519CC9 Comment Length        0000 (0)\n-519CCB Disk Start            0000 (0)\n-519CCD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519CCF Ext File Attributes   00000000 (0)\n-519CD3 Local Header Offset   000718BB (465083)\n-519CD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519CD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519D08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519D0A   Length              0005 (5)\n-519D0C   Flags               01 (1) 'Modification'\n-519D0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519D11 CENTRAL HEADER #215   02014B50 (33639248)\n-519D15 Created Zip Spec      14 (20) '2.0'\n-519D16 Created OS            00 (0) 'MS-DOS'\n-519D17 Extract Zip Spec      14 (20) '2.0'\n-519D18 Extract OS            00 (0) 'MS-DOS'\n-519D19 General Purpose Flag  0000 (0)\n-519D1B Compression Method    0000 (0) 'Stored'\n-519D1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519D21 CRC                   00000000 (0)\n-519D25 Compressed Size       00000000 (0)\n-519D29 Uncompressed Size     00000000 (0)\n-519D2D Filename Length       003A (58)\n-519D2F Extra Length          0009 (9)\n-519D31 Comment Length        0000 (0)\n-519D33 Disk Start            0000 (0)\n-519D35 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519D37 Ext File Attributes   00000000 (0)\n-519D3B Local Header Offset   00071913 (465171)\n-519D3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519D3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519D79 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519D7B   Length              0005 (5)\n-519D7D   Flags               01 (1) 'Modification'\n-519D7E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519D82 CENTRAL HEADER #216   02014B50 (33639248)\n-519D86 Created Zip Spec      14 (20) '2.0'\n-519D87 Created OS            00 (0) 'MS-DOS'\n-519D88 Extract Zip Spec      14 (20) '2.0'\n-519D89 Extract OS            00 (0) 'MS-DOS'\n-519D8A General Purpose Flag  0000 (0)\n-519D8C Compression Method    0000 (0) 'Stored'\n-519D8E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519D92 CRC                   00000000 (0)\n-519D96 Compressed Size       00000000 (0)\n-519D9A Uncompressed Size     00000000 (0)\n-519D9E Filename Length       006C (108)\n-519DA0 Extra Length          0009 (9)\n-519DA2 Comment Length        0000 (0)\n-519DA4 Disk Start            0000 (0)\n-519DA6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519DA8 Ext File Attributes   00000000 (0)\n-519DAC Local Header Offset   00071974 (465268)\n-519DB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519DB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519E1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519E1E   Length              0005 (5)\n-519E20   Flags               01 (1) 'Modification'\n-519E21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519E25 CENTRAL HEADER #217   02014B50 (33639248)\n-519E29 Created Zip Spec      14 (20) '2.0'\n-519E2A Created OS            00 (0) 'MS-DOS'\n-519E2B Extract Zip Spec      14 (20) '2.0'\n-519E2C Extract OS            00 (0) 'MS-DOS'\n-519E2D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-519E2F Compression Method    0000 (0) 'Stored'\n-519E31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519E35 CRC                   9A51A289 (2589041289)\n-519E39 Compressed Size       000008AB (2219)\n-519E3D Uncompressed Size     000008AB (2219)\n-519E41 Filename Length       0082 (130)\n-519E43 Extra Length          0009 (9)\n-519E45 Comment Length        0000 (0)\n-519E47 Disk Start            0000 (0)\n-519E49 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519E4B Ext File Attributes   00000000 (0)\n-519E4F Local Header Offset   00071A07 (465415)\n-519E53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519E53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519ED5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519ED7   Length              0005 (5)\n-519ED9   Flags               01 (1) 'Modification'\n-519EDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519EDE CENTRAL HEADER #218   02014B50 (33639248)\n-519EE2 Created Zip Spec      14 (20) '2.0'\n-519EE3 Created OS            00 (0) 'MS-DOS'\n-519EE4 Extract Zip Spec      14 (20) '2.0'\n-519EE5 Extract OS            00 (0) 'MS-DOS'\n-519EE6 General Purpose Flag  0000 (0)\n-519EE8 Compression Method    0000 (0) 'Stored'\n-519EEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519EEE CRC                   00000000 (0)\n-519EF2 Compressed Size       00000000 (0)\n-519EF6 Uncompressed Size     00000000 (0)\n-519EFA Filename Length       0022 (34)\n-519EFC Extra Length          0009 (9)\n-519EFE Comment Length        0000 (0)\n-519F00 Disk Start            0000 (0)\n-519F02 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519F04 Ext File Attributes   00000000 (0)\n-519F08 Local Header Offset   0007236B (467819)\n-519F0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519F0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519F2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519F30   Length              0005 (5)\n-519F32   Flags               01 (1) 'Modification'\n-519F33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519F37 CENTRAL HEADER #219   02014B50 (33639248)\n-519F3B Created Zip Spec      14 (20) '2.0'\n-519F3C Created OS            00 (0) 'MS-DOS'\n-519F3D Extract Zip Spec      14 (20) '2.0'\n-519F3E Extract OS            00 (0) 'MS-DOS'\n-519F3F General Purpose Flag  0000 (0)\n-519F41 Compression Method    0000 (0) 'Stored'\n-519F43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519F47 CRC                   00000000 (0)\n-519F4B Compressed Size       00000000 (0)\n-519F4F Uncompressed Size     00000000 (0)\n-519F53 Filename Length       002B (43)\n-519F55 Extra Length          0009 (9)\n-519F57 Comment Length        0000 (0)\n-519F59 Disk Start            0000 (0)\n-519F5B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519F5D Ext File Attributes   00000000 (0)\n-519F61 Local Header Offset   000723B4 (467892)\n-519F65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519F65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-519F90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-519F92   Length              0005 (5)\n-519F94   Flags               01 (1) 'Modification'\n-519F95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-519F99 CENTRAL HEADER #220   02014B50 (33639248)\n-519F9D Created Zip Spec      14 (20) '2.0'\n-519F9E Created OS            00 (0) 'MS-DOS'\n-519F9F Extract Zip Spec      14 (20) '2.0'\n-519FA0 Extract OS            00 (0) 'MS-DOS'\n-519FA1 General Purpose Flag  0000 (0)\n-519FA3 Compression Method    0000 (0) 'Stored'\n-519FA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-519FA9 CRC                   00000000 (0)\n-519FAD Compressed Size       00000000 (0)\n-519FB1 Uncompressed Size     00000000 (0)\n-519FB5 Filename Length       004D (77)\n-519FB7 Extra Length          0009 (9)\n-519FB9 Comment Length        0000 (0)\n-519FBB Disk Start            0000 (0)\n-519FBD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-519FBF Ext File Attributes   00000000 (0)\n-519FC3 Local Header Offset   00072406 (467974)\n-519FC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x519FC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A014 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A016   Length              0005 (5)\n-51A018   Flags               01 (1) 'Modification'\n-51A019   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A01D CENTRAL HEADER #221   02014B50 (33639248)\n-51A021 Created Zip Spec      14 (20) '2.0'\n-51A022 Created OS            00 (0) 'MS-DOS'\n-51A023 Extract Zip Spec      14 (20) '2.0'\n-51A024 Extract OS            00 (0) 'MS-DOS'\n-51A025 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A027 Compression Method    0000 (0) 'Stored'\n-51A029 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A02D CRC                   BEAE3D9C (3199090076)\n-51A031 Compressed Size       0000396F (14703)\n-51A035 Uncompressed Size     0000396F (14703)\n-51A039 Filename Length       0063 (99)\n-51A03B Extra Length          0009 (9)\n-51A03D Comment Length        0000 (0)\n-51A03F Disk Start            0000 (0)\n-51A041 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A043 Ext File Attributes   00000000 (0)\n-51A047 Local Header Offset   0007247A (468090)\n-51A04B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A04B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A0AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A0B0   Length              0005 (5)\n-51A0B2   Flags               01 (1) 'Modification'\n-51A0B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A0B7 CENTRAL HEADER #222   02014B50 (33639248)\n-51A0BB Created Zip Spec      14 (20) '2.0'\n-51A0BC Created OS            00 (0) 'MS-DOS'\n-51A0BD Extract Zip Spec      14 (20) '2.0'\n-51A0BE Extract OS            00 (0) 'MS-DOS'\n-51A0BF General Purpose Flag  0000 (0)\n-51A0C1 Compression Method    0000 (0) 'Stored'\n-51A0C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A0C7 CRC                   00000000 (0)\n-51A0CB Compressed Size       00000000 (0)\n-51A0CF Uncompressed Size     00000000 (0)\n-51A0D3 Filename Length       0030 (48)\n-51A0D5 Extra Length          0009 (9)\n-51A0D7 Comment Length        0000 (0)\n-51A0D9 Disk Start            0000 (0)\n-51A0DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A0DD Ext File Attributes   00000000 (0)\n-51A0E1 Local Header Offset   00075E83 (482947)\n-51A0E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A0E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A115 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A117   Length              0005 (5)\n-51A119   Flags               01 (1) 'Modification'\n-51A11A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A11E CENTRAL HEADER #223   02014B50 (33639248)\n-51A122 Created Zip Spec      14 (20) '2.0'\n-51A123 Created OS            00 (0) 'MS-DOS'\n-51A124 Extract Zip Spec      14 (20) '2.0'\n-51A125 Extract OS            00 (0) 'MS-DOS'\n-51A126 General Purpose Flag  0000 (0)\n-51A128 Compression Method    0000 (0) 'Stored'\n-51A12A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A12E CRC                   00000000 (0)\n-51A132 Compressed Size       00000000 (0)\n-51A136 Uncompressed Size     00000000 (0)\n-51A13A Filename Length       0039 (57)\n-51A13C Extra Length          0009 (9)\n-51A13E Comment Length        0000 (0)\n-51A140 Disk Start            0000 (0)\n-51A142 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A144 Ext File Attributes   00000000 (0)\n-51A148 Local Header Offset   00075EDA (483034)\n-51A14C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A14C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A185 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A187   Length              0005 (5)\n-51A189   Flags               01 (1) 'Modification'\n-51A18A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A18E CENTRAL HEADER #224   02014B50 (33639248)\n-51A192 Created Zip Spec      14 (20) '2.0'\n-51A193 Created OS            00 (0) 'MS-DOS'\n-51A194 Extract Zip Spec      14 (20) '2.0'\n-51A195 Extract OS            00 (0) 'MS-DOS'\n-51A196 General Purpose Flag  0000 (0)\n-51A198 Compression Method    0000 (0) 'Stored'\n-51A19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A19E CRC                   00000000 (0)\n-51A1A2 Compressed Size       00000000 (0)\n-51A1A6 Uncompressed Size     00000000 (0)\n-51A1AA Filename Length       006A (106)\n-51A1AC Extra Length          0009 (9)\n-51A1AE Comment Length        0000 (0)\n-51A1B0 Disk Start            0000 (0)\n-51A1B2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A1B4 Ext File Attributes   00000000 (0)\n-51A1B8 Local Header Offset   00075F3A (483130)\n-51A1BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A1BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A226 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A228   Length              0005 (5)\n-51A22A   Flags               01 (1) 'Modification'\n-51A22B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A22F CENTRAL HEADER #225   02014B50 (33639248)\n-51A233 Created Zip Spec      14 (20) '2.0'\n-51A234 Created OS            00 (0) 'MS-DOS'\n-51A235 Extract Zip Spec      14 (20) '2.0'\n-51A236 Extract OS            00 (0) 'MS-DOS'\n-51A237 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A239 Compression Method    0000 (0) 'Stored'\n-51A23B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A23F CRC                   29D620BA (701898938)\n-51A243 Compressed Size       00002421 (9249)\n-51A247 Uncompressed Size     00002421 (9249)\n-51A24B Filename Length       0080 (128)\n-51A24D Extra Length          0009 (9)\n-51A24F Comment Length        0000 (0)\n-51A251 Disk Start            0000 (0)\n-51A253 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A255 Ext File Attributes   00000000 (0)\n-51A259 Local Header Offset   00075FCB (483275)\n-51A25D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A25D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A2DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A2DF   Length              0005 (5)\n-51A2E1   Flags               01 (1) 'Modification'\n-51A2E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A2E6 CENTRAL HEADER #226   02014B50 (33639248)\n-51A2EA Created Zip Spec      14 (20) '2.0'\n-51A2EB Created OS            00 (0) 'MS-DOS'\n-51A2EC Extract Zip Spec      14 (20) '2.0'\n-51A2ED Extract OS            00 (0) 'MS-DOS'\n-51A2EE General Purpose Flag  0000 (0)\n-51A2F0 Compression Method    0000 (0) 'Stored'\n-51A2F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A2F6 CRC                   00000000 (0)\n-51A2FA Compressed Size       00000000 (0)\n-51A2FE Uncompressed Size     00000000 (0)\n-51A302 Filename Length       003C (60)\n-51A304 Extra Length          0009 (9)\n-51A306 Comment Length        0000 (0)\n-51A308 Disk Start            0000 (0)\n-51A30A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A30C Ext File Attributes   00000000 (0)\n-51A310 Local Header Offset   000784A3 (492707)\n-51A314 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A314: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A350 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A352   Length              0005 (5)\n-51A354   Flags               01 (1) 'Modification'\n-51A355   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A359 CENTRAL HEADER #227   02014B50 (33639248)\n-51A35D Created Zip Spec      14 (20) '2.0'\n-51A35E Created OS            00 (0) 'MS-DOS'\n-51A35F Extract Zip Spec      14 (20) '2.0'\n-51A360 Extract OS            00 (0) 'MS-DOS'\n-51A361 General Purpose Flag  0000 (0)\n-51A363 Compression Method    0000 (0) 'Stored'\n-51A365 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A369 CRC                   00000000 (0)\n-51A36D Compressed Size       00000000 (0)\n-51A371 Uncompressed Size     00000000 (0)\n-51A375 Filename Length       0045 (69)\n-51A377 Extra Length          0009 (9)\n-51A379 Comment Length        0000 (0)\n-51A37B Disk Start            0000 (0)\n-51A37D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A37F Ext File Attributes   00000000 (0)\n-51A383 Local Header Offset   00078506 (492806)\n-51A387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A3CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A3CE   Length              0005 (5)\n-51A3D0   Flags               01 (1) 'Modification'\n-51A3D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A3D5 CENTRAL HEADER #228   02014B50 (33639248)\n-51A3D9 Created Zip Spec      14 (20) '2.0'\n-51A3DA Created OS            00 (0) 'MS-DOS'\n-51A3DB Extract Zip Spec      14 (20) '2.0'\n-51A3DC Extract OS            00 (0) 'MS-DOS'\n-51A3DD General Purpose Flag  0000 (0)\n-51A3DF Compression Method    0000 (0) 'Stored'\n-51A3E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A3E5 CRC                   00000000 (0)\n-51A3E9 Compressed Size       00000000 (0)\n-51A3ED Uncompressed Size     00000000 (0)\n-51A3F1 Filename Length       0063 (99)\n-51A3F3 Extra Length          0009 (9)\n-51A3F5 Comment Length        0000 (0)\n-51A3F7 Disk Start            0000 (0)\n-51A3F9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A3FB Ext File Attributes   00000000 (0)\n-51A3FF Local Header Offset   00078572 (492914)\n-51A403 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A403: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A466 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A468   Length              0005 (5)\n-51A46A   Flags               01 (1) 'Modification'\n-51A46B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A46F CENTRAL HEADER #229   02014B50 (33639248)\n-51A473 Created Zip Spec      14 (20) '2.0'\n-51A474 Created OS            00 (0) 'MS-DOS'\n-51A475 Extract Zip Spec      14 (20) '2.0'\n-51A476 Extract OS            00 (0) 'MS-DOS'\n-51A477 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A479 Compression Method    0000 (0) 'Stored'\n-51A47B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A47F CRC                   9ED7BE90 (2664939152)\n-51A483 Compressed Size       000036E7 (14055)\n-51A487 Uncompressed Size     000036E7 (14055)\n-51A48B Filename Length       0079 (121)\n-51A48D Extra Length          0009 (9)\n-51A48F Comment Length        0000 (0)\n-51A491 Disk Start            0000 (0)\n-51A493 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A495 Ext File Attributes   00000000 (0)\n-51A499 Local Header Offset   000785FC (493052)\n-51A49D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A49D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A516 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A518   Length              0005 (5)\n-51A51A   Flags               01 (1) 'Modification'\n-51A51B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A51F CENTRAL HEADER #230   02014B50 (33639248)\n-51A523 Created Zip Spec      14 (20) '2.0'\n-51A524 Created OS            00 (0) 'MS-DOS'\n-51A525 Extract Zip Spec      14 (20) '2.0'\n-51A526 Extract OS            00 (0) 'MS-DOS'\n-51A527 General Purpose Flag  0000 (0)\n-51A529 Compression Method    0000 (0) 'Stored'\n-51A52B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A52F CRC                   00000000 (0)\n-51A533 Compressed Size       00000000 (0)\n-51A537 Uncompressed Size     00000000 (0)\n-51A53B Filename Length       0063 (99)\n-51A53D Extra Length          0009 (9)\n-51A53F Comment Length        0000 (0)\n-51A541 Disk Start            0000 (0)\n-51A543 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A545 Ext File Attributes   00000000 (0)\n-51A549 Local Header Offset   0007BD93 (507283)\n-51A54D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A54D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A5B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A5B2   Length              0005 (5)\n-51A5B4   Flags               01 (1) 'Modification'\n-51A5B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A5B9 CENTRAL HEADER #231   02014B50 (33639248)\n-51A5BD Created Zip Spec      14 (20) '2.0'\n-51A5BE Created OS            00 (0) 'MS-DOS'\n-51A5BF Extract Zip Spec      14 (20) '2.0'\n-51A5C0 Extract OS            00 (0) 'MS-DOS'\n-51A5C1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A5C3 Compression Method    0000 (0) 'Stored'\n-51A5C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A5C9 CRC                   B51FDD91 (3038764433)\n-51A5CD Compressed Size       00004792 (18322)\n-51A5D1 Uncompressed Size     00004792 (18322)\n-51A5D5 Filename Length       0079 (121)\n-51A5D7 Extra Length          0009 (9)\n-51A5D9 Comment Length        0000 (0)\n-51A5DB Disk Start            0000 (0)\n-51A5DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A5DF Ext File Attributes   00000000 (0)\n-51A5E3 Local Header Offset   0007BE1D (507421)\n-51A5E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A5E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A660 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A662   Length              0005 (5)\n-51A664   Flags               01 (1) 'Modification'\n-51A665   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A669 CENTRAL HEADER #232   02014B50 (33639248)\n-51A66D Created Zip Spec      14 (20) '2.0'\n-51A66E Created OS            00 (0) 'MS-DOS'\n-51A66F Extract Zip Spec      14 (20) '2.0'\n-51A670 Extract OS            00 (0) 'MS-DOS'\n-51A671 General Purpose Flag  0000 (0)\n-51A673 Compression Method    0000 (0) 'Stored'\n-51A675 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A679 CRC                   00000000 (0)\n-51A67D Compressed Size       00000000 (0)\n-51A681 Uncompressed Size     00000000 (0)\n-51A685 Filename Length       0065 (101)\n-51A687 Extra Length          0009 (9)\n-51A689 Comment Length        0000 (0)\n-51A68B Disk Start            0000 (0)\n-51A68D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A68F Ext File Attributes   00000000 (0)\n-51A693 Local Header Offset   0008065F (525919)\n-51A697 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A697: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A6FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A6FE   Length              0005 (5)\n-51A700   Flags               01 (1) 'Modification'\n-51A701   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A705 CENTRAL HEADER #233   02014B50 (33639248)\n-51A709 Created Zip Spec      14 (20) '2.0'\n-51A70A Created OS            00 (0) 'MS-DOS'\n-51A70B Extract Zip Spec      14 (20) '2.0'\n-51A70C Extract OS            00 (0) 'MS-DOS'\n-51A70D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A70F Compression Method    0000 (0) 'Stored'\n-51A711 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A715 CRC                   27CFA48B (667919499)\n-51A719 Compressed Size       00005DDC (24028)\n-51A71D Uncompressed Size     00005DDC (24028)\n-51A721 Filename Length       007B (123)\n-51A723 Extra Length          0009 (9)\n-51A725 Comment Length        0000 (0)\n-51A727 Disk Start            0000 (0)\n-51A729 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A72B Ext File Attributes   00000000 (0)\n-51A72F Local Header Offset   000806EB (526059)\n-51A733 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A733: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A7AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A7B0   Length              0005 (5)\n-51A7B2   Flags               01 (1) 'Modification'\n-51A7B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A7B7 CENTRAL HEADER #234   02014B50 (33639248)\n-51A7BB Created Zip Spec      14 (20) '2.0'\n-51A7BC Created OS            00 (0) 'MS-DOS'\n-51A7BD Extract Zip Spec      14 (20) '2.0'\n-51A7BE Extract OS            00 (0) 'MS-DOS'\n-51A7BF General Purpose Flag  0000 (0)\n-51A7C1 Compression Method    0000 (0) 'Stored'\n-51A7C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A7C7 CRC                   00000000 (0)\n-51A7CB Compressed Size       00000000 (0)\n-51A7CF Uncompressed Size     00000000 (0)\n-51A7D3 Filename Length       0069 (105)\n-51A7D5 Extra Length          0009 (9)\n-51A7D7 Comment Length        0000 (0)\n-51A7D9 Disk Start            0000 (0)\n-51A7DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A7DD Ext File Attributes   00000000 (0)\n-51A7E1 Local Header Offset   00086579 (550265)\n-51A7E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A7E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A84E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A850   Length              0005 (5)\n-51A852   Flags               01 (1) 'Modification'\n-51A853   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A857 CENTRAL HEADER #235   02014B50 (33639248)\n-51A85B Created Zip Spec      14 (20) '2.0'\n-51A85C Created OS            00 (0) 'MS-DOS'\n-51A85D Extract Zip Spec      14 (20) '2.0'\n-51A85E Extract OS            00 (0) 'MS-DOS'\n-51A85F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A861 Compression Method    0000 (0) 'Stored'\n-51A863 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A867 CRC                   620AB78F (1644869519)\n-51A86B Compressed Size       00003B3A (15162)\n-51A86F Uncompressed Size     00003B3A (15162)\n-51A873 Filename Length       007F (127)\n-51A875 Extra Length          0009 (9)\n-51A877 Comment Length        0000 (0)\n-51A879 Disk Start            0000 (0)\n-51A87B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A87D Ext File Attributes   00000000 (0)\n-51A881 Local Header Offset   00086609 (550409)\n-51A885 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A885: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A904 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A906   Length              0005 (5)\n-51A908   Flags               01 (1) 'Modification'\n-51A909   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A90D CENTRAL HEADER #236   02014B50 (33639248)\n-51A911 Created Zip Spec      14 (20) '2.0'\n-51A912 Created OS            00 (0) 'MS-DOS'\n-51A913 Extract Zip Spec      14 (20) '2.0'\n-51A914 Extract OS            00 (0) 'MS-DOS'\n-51A915 General Purpose Flag  0000 (0)\n-51A917 Compression Method    0000 (0) 'Stored'\n-51A919 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A91D CRC                   00000000 (0)\n-51A921 Compressed Size       00000000 (0)\n-51A925 Uncompressed Size     00000000 (0)\n-51A929 Filename Length       0069 (105)\n-51A92B Extra Length          0009 (9)\n-51A92D Comment Length        0000 (0)\n-51A92F Disk Start            0000 (0)\n-51A931 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A933 Ext File Attributes   00000000 (0)\n-51A937 Local Header Offset   0008A1F9 (565753)\n-51A93B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A93B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51A9A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51A9A6   Length              0005 (5)\n-51A9A8   Flags               01 (1) 'Modification'\n-51A9A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51A9AD CENTRAL HEADER #237   02014B50 (33639248)\n-51A9B1 Created Zip Spec      14 (20) '2.0'\n-51A9B2 Created OS            00 (0) 'MS-DOS'\n-51A9B3 Extract Zip Spec      14 (20) '2.0'\n-51A9B4 Extract OS            00 (0) 'MS-DOS'\n-51A9B5 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51A9B7 Compression Method    0000 (0) 'Stored'\n-51A9B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51A9BD CRC                   937A07E6 (2474248166)\n-51A9C1 Compressed Size       00004869 (18537)\n-51A9C5 Uncompressed Size     00004869 (18537)\n-51A9C9 Filename Length       007F (127)\n-51A9CB Extra Length          0009 (9)\n-51A9CD Comment Length        0000 (0)\n-51A9CF Disk Start            0000 (0)\n-51A9D1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51A9D3 Ext File Attributes   00000000 (0)\n-51A9D7 Local Header Offset   0008A289 (565897)\n-51A9DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51A9DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AA5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AA5C   Length              0005 (5)\n-51AA5E   Flags               01 (1) 'Modification'\n-51AA5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AA63 CENTRAL HEADER #238   02014B50 (33639248)\n-51AA67 Created Zip Spec      14 (20) '2.0'\n-51AA68 Created OS            00 (0) 'MS-DOS'\n-51AA69 Extract Zip Spec      14 (20) '2.0'\n-51AA6A Extract OS            00 (0) 'MS-DOS'\n-51AA6B General Purpose Flag  0000 (0)\n-51AA6D Compression Method    0000 (0) 'Stored'\n-51AA6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AA73 CRC                   00000000 (0)\n-51AA77 Compressed Size       00000000 (0)\n-51AA7B Uncompressed Size     00000000 (0)\n-51AA7F Filename Length       006D (109)\n-51AA81 Extra Length          0009 (9)\n-51AA83 Comment Length        0000 (0)\n-51AA85 Disk Start            0000 (0)\n-51AA87 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AA89 Ext File Attributes   00000000 (0)\n-51AA8D Local Header Offset   0008EBA8 (584616)\n-51AA91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AA91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AAFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AB00   Length              0005 (5)\n-51AB02   Flags               01 (1) 'Modification'\n-51AB03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AB07 CENTRAL HEADER #239   02014B50 (33639248)\n-51AB0B Created Zip Spec      14 (20) '2.0'\n-51AB0C Created OS            00 (0) 'MS-DOS'\n-51AB0D Extract Zip Spec      14 (20) '2.0'\n-51AB0E Extract OS            00 (0) 'MS-DOS'\n-51AB0F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51AB11 Compression Method    0000 (0) 'Stored'\n-51AB13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AB17 CRC                   53DFF1D7 (1407185367)\n-51AB1B Compressed Size       00000ADF (2783)\n-51AB1F Uncompressed Size     00000ADF (2783)\n-51AB23 Filename Length       0083 (131)\n-51AB25 Extra Length          0009 (9)\n-51AB27 Comment Length        0000 (0)\n-51AB29 Disk Start            0000 (0)\n-51AB2B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AB2D Ext File Attributes   00000000 (0)\n-51AB31 Local Header Offset   0008EC3C (584764)\n-51AB35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AB35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51ABB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51ABBA   Length              0005 (5)\n-51ABBC   Flags               01 (1) 'Modification'\n-51ABBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51ABC1 CENTRAL HEADER #240   02014B50 (33639248)\n-51ABC5 Created Zip Spec      14 (20) '2.0'\n-51ABC6 Created OS            00 (0) 'MS-DOS'\n-51ABC7 Extract Zip Spec      14 (20) '2.0'\n-51ABC8 Extract OS            00 (0) 'MS-DOS'\n-51ABC9 General Purpose Flag  0000 (0)\n-51ABCB Compression Method    0000 (0) 'Stored'\n-51ABCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51ABD1 CRC                   00000000 (0)\n-51ABD5 Compressed Size       00000000 (0)\n-51ABD9 Uncompressed Size     00000000 (0)\n-51ABDD Filename Length       0069 (105)\n-51ABDF Extra Length          0009 (9)\n-51ABE1 Comment Length        0000 (0)\n-51ABE3 Disk Start            0000 (0)\n-51ABE5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51ABE7 Ext File Attributes   00000000 (0)\n-51ABEB Local Header Offset   0008F7D5 (587733)\n-51ABEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51ABEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AC58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AC5A   Length              0005 (5)\n-51AC5C   Flags               01 (1) 'Modification'\n-51AC5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AC61 CENTRAL HEADER #241   02014B50 (33639248)\n-51AC65 Created Zip Spec      14 (20) '2.0'\n-51AC66 Created OS            00 (0) 'MS-DOS'\n-51AC67 Extract Zip Spec      14 (20) '2.0'\n-51AC68 Extract OS            00 (0) 'MS-DOS'\n-51AC69 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51AC6B Compression Method    0000 (0) 'Stored'\n-51AC6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AC71 CRC                   6D3A5445 (1832539205)\n-51AC75 Compressed Size       00000939 (2361)\n-51AC79 Uncompressed Size     00000939 (2361)\n-51AC7D Filename Length       007F (127)\n-51AC7F Extra Length          0009 (9)\n-51AC81 Comment Length        0000 (0)\n-51AC83 Disk Start            0000 (0)\n-51AC85 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AC87 Ext File Attributes   00000000 (0)\n-51AC8B Local Header Offset   0008F865 (587877)\n-51AC8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AC8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AD0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AD10   Length              0005 (5)\n-51AD12   Flags               01 (1) 'Modification'\n-51AD13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AD17 CENTRAL HEADER #242   02014B50 (33639248)\n-51AD1B Created Zip Spec      14 (20) '2.0'\n-51AD1C Created OS            00 (0) 'MS-DOS'\n-51AD1D Extract Zip Spec      14 (20) '2.0'\n-51AD1E Extract OS            00 (0) 'MS-DOS'\n-51AD1F General Purpose Flag  0000 (0)\n-51AD21 Compression Method    0000 (0) 'Stored'\n-51AD23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AD27 CRC                   00000000 (0)\n-51AD2B Compressed Size       00000000 (0)\n-51AD2F Uncompressed Size     00000000 (0)\n-51AD33 Filename Length       0078 (120)\n-51AD35 Extra Length          0009 (9)\n-51AD37 Comment Length        0000 (0)\n-51AD39 Disk Start            0000 (0)\n-51AD3B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AD3D Ext File Attributes   00000000 (0)\n-51AD41 Local Header Offset   00090254 (590420)\n-51AD45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AD45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51ADBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51ADBF   Length              0005 (5)\n-51ADC1   Flags               01 (1) 'Modification'\n-51ADC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51ADC6 CENTRAL HEADER #243   02014B50 (33639248)\n-51ADCA Created Zip Spec      14 (20) '2.0'\n-51ADCB Created OS            00 (0) 'MS-DOS'\n-51ADCC Extract Zip Spec      14 (20) '2.0'\n-51ADCD Extract OS            00 (0) 'MS-DOS'\n-51ADCE General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51ADD0 Compression Method    0000 (0) 'Stored'\n-51ADD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51ADD6 CRC                   5C6B1924 (1550522660)\n-51ADDA Compressed Size       00000DDD (3549)\n-51ADDE Uncompressed Size     00000DDD (3549)\n-51ADE2 Filename Length       008E (142)\n-51ADE4 Extra Length          0009 (9)\n-51ADE6 Comment Length        0000 (0)\n-51ADE8 Disk Start            0000 (0)\n-51ADEA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51ADEC Ext File Attributes   00000000 (0)\n-51ADF0 Local Header Offset   000902F3 (590579)\n-51ADF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+518A7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518A7C   Length              0005 (5)\n+518A7E   Flags               01 (1) 'Modification'\n+518A7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518A83 CENTRAL HEADER #184   02014B50 (33639248)\n+518A87 Created Zip Spec      14 (20) '2.0'\n+518A88 Created OS            00 (0) 'MS-DOS'\n+518A89 Extract Zip Spec      14 (20) '2.0'\n+518A8A Extract OS            00 (0) 'MS-DOS'\n+518A8B General Purpose Flag  0000 (0)\n+518A8D Compression Method    0000 (0) 'Stored'\n+518A8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518A93 CRC                   00000000 (0)\n+518A97 Compressed Size       00000000 (0)\n+518A9B Uncompressed Size     00000000 (0)\n+518A9F Filename Length       006A (106)\n+518AA1 Extra Length          0009 (9)\n+518AA3 Comment Length        0000 (0)\n+518AA5 Disk Start            0000 (0)\n+518AA7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518AA9 Ext File Attributes   00000000 (0)\n+518AAD Local Header Offset   00066857 (419927)\n+518AB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518AB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518B1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518B1D   Length              0005 (5)\n+518B1F   Flags               01 (1) 'Modification'\n+518B20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518B24 CENTRAL HEADER #185   02014B50 (33639248)\n+518B28 Created Zip Spec      14 (20) '2.0'\n+518B29 Created OS            00 (0) 'MS-DOS'\n+518B2A Extract Zip Spec      14 (20) '2.0'\n+518B2B Extract OS            00 (0) 'MS-DOS'\n+518B2C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518B2E Compression Method    0000 (0) 'Stored'\n+518B30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518B34 CRC                   8BF94713 (2348369683)\n+518B38 Compressed Size       00002C4C (11340)\n+518B3C Uncompressed Size     00002C4C (11340)\n+518B40 Filename Length       0080 (128)\n+518B42 Extra Length          0009 (9)\n+518B44 Comment Length        0000 (0)\n+518B46 Disk Start            0000 (0)\n+518B48 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518B4A Ext File Attributes   00000000 (0)\n+518B4E Local Header Offset   000668E8 (420072)\n+518B52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518B52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518BD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518BD4   Length              0005 (5)\n+518BD6   Flags               01 (1) 'Modification'\n+518BD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518BDB CENTRAL HEADER #186   02014B50 (33639248)\n+518BDF Created Zip Spec      14 (20) '2.0'\n+518BE0 Created OS            00 (0) 'MS-DOS'\n+518BE1 Extract Zip Spec      14 (20) '2.0'\n+518BE2 Extract OS            00 (0) 'MS-DOS'\n+518BE3 General Purpose Flag  0000 (0)\n+518BE5 Compression Method    0000 (0) 'Stored'\n+518BE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518BEB CRC                   00000000 (0)\n+518BEF Compressed Size       00000000 (0)\n+518BF3 Uncompressed Size     00000000 (0)\n+518BF7 Filename Length       002E (46)\n+518BF9 Extra Length          0009 (9)\n+518BFB Comment Length        0000 (0)\n+518BFD Disk Start            0000 (0)\n+518BFF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518C01 Ext File Attributes   00000000 (0)\n+518C05 Local Header Offset   000695EB (431595)\n+518C09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518C09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518C37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518C39   Length              0005 (5)\n+518C3B   Flags               01 (1) 'Modification'\n+518C3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518C40 CENTRAL HEADER #187   02014B50 (33639248)\n+518C44 Created Zip Spec      14 (20) '2.0'\n+518C45 Created OS            00 (0) 'MS-DOS'\n+518C46 Extract Zip Spec      14 (20) '2.0'\n+518C47 Extract OS            00 (0) 'MS-DOS'\n+518C48 General Purpose Flag  0000 (0)\n+518C4A Compression Method    0000 (0) 'Stored'\n+518C4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518C50 CRC                   00000000 (0)\n+518C54 Compressed Size       00000000 (0)\n+518C58 Uncompressed Size     00000000 (0)\n+518C5C Filename Length       0037 (55)\n+518C5E Extra Length          0009 (9)\n+518C60 Comment Length        0000 (0)\n+518C62 Disk Start            0000 (0)\n+518C64 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518C66 Ext File Attributes   00000000 (0)\n+518C6A Local Header Offset   00069640 (431680)\n+518C6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518C6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518CA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518CA7   Length              0005 (5)\n+518CA9   Flags               01 (1) 'Modification'\n+518CAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518CAE CENTRAL HEADER #188   02014B50 (33639248)\n+518CB2 Created Zip Spec      14 (20) '2.0'\n+518CB3 Created OS            00 (0) 'MS-DOS'\n+518CB4 Extract Zip Spec      14 (20) '2.0'\n+518CB5 Extract OS            00 (0) 'MS-DOS'\n+518CB6 General Purpose Flag  0000 (0)\n+518CB8 Compression Method    0000 (0) 'Stored'\n+518CBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518CBE CRC                   00000000 (0)\n+518CC2 Compressed Size       00000000 (0)\n+518CC6 Uncompressed Size     00000000 (0)\n+518CCA Filename Length       0060 (96)\n+518CCC Extra Length          0009 (9)\n+518CCE Comment Length        0000 (0)\n+518CD0 Disk Start            0000 (0)\n+518CD2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518CD4 Ext File Attributes   00000000 (0)\n+518CD8 Local Header Offset   0006969E (431774)\n+518CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518D3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518D3E   Length              0005 (5)\n+518D40   Flags               01 (1) 'Modification'\n+518D41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518D45 CENTRAL HEADER #189   02014B50 (33639248)\n+518D49 Created Zip Spec      14 (20) '2.0'\n+518D4A Created OS            00 (0) 'MS-DOS'\n+518D4B Extract Zip Spec      14 (20) '2.0'\n+518D4C Extract OS            00 (0) 'MS-DOS'\n+518D4D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518D4F Compression Method    0000 (0) 'Stored'\n+518D51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518D55 CRC                   42E654D4 (1122391252)\n+518D59 Compressed Size       00000EFA (3834)\n+518D5D Uncompressed Size     00000EFA (3834)\n+518D61 Filename Length       0076 (118)\n+518D63 Extra Length          0009 (9)\n+518D65 Comment Length        0000 (0)\n+518D67 Disk Start            0000 (0)\n+518D69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518D6B Ext File Attributes   00000000 (0)\n+518D6F Local Header Offset   00069725 (431909)\n+518D73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518D73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518DE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518DEB   Length              0005 (5)\n+518DED   Flags               01 (1) 'Modification'\n+518DEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518DF2 CENTRAL HEADER #190   02014B50 (33639248)\n+518DF6 Created Zip Spec      14 (20) '2.0'\n+518DF7 Created OS            00 (0) 'MS-DOS'\n+518DF8 Extract Zip Spec      14 (20) '2.0'\n+518DF9 Extract OS            00 (0) 'MS-DOS'\n+518DFA General Purpose Flag  0000 (0)\n+518DFC Compression Method    0000 (0) 'Stored'\n+518DFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518E02 CRC                   00000000 (0)\n+518E06 Compressed Size       00000000 (0)\n+518E0A Uncompressed Size     00000000 (0)\n+518E0E Filename Length       0066 (102)\n+518E10 Extra Length          0009 (9)\n+518E12 Comment Length        0000 (0)\n+518E14 Disk Start            0000 (0)\n+518E16 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518E18 Ext File Attributes   00000000 (0)\n+518E1C Local Header Offset   0006A6CC (435916)\n+518E20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518E20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518E86 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518E88   Length              0005 (5)\n+518E8A   Flags               01 (1) 'Modification'\n+518E8B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518E8F CENTRAL HEADER #191   02014B50 (33639248)\n+518E93 Created Zip Spec      14 (20) '2.0'\n+518E94 Created OS            00 (0) 'MS-DOS'\n+518E95 Extract Zip Spec      14 (20) '2.0'\n+518E96 Extract OS            00 (0) 'MS-DOS'\n+518E97 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+518E99 Compression Method    0000 (0) 'Stored'\n+518E9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518E9F CRC                   51B4F745 (1370814277)\n+518EA3 Compressed Size       000016D7 (5847)\n+518EA7 Uncompressed Size     000016D7 (5847)\n+518EAB Filename Length       007C (124)\n+518EAD Extra Length          0009 (9)\n+518EAF Comment Length        0000 (0)\n+518EB1 Disk Start            0000 (0)\n+518EB3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518EB5 Ext File Attributes   00000000 (0)\n+518EB9 Local Header Offset   0006A759 (436057)\n+518EBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518EBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518F39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518F3B   Length              0005 (5)\n+518F3D   Flags               01 (1) 'Modification'\n+518F3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518F42 CENTRAL HEADER #192   02014B50 (33639248)\n+518F46 Created Zip Spec      14 (20) '2.0'\n+518F47 Created OS            00 (0) 'MS-DOS'\n+518F48 Extract Zip Spec      14 (20) '2.0'\n+518F49 Extract OS            00 (0) 'MS-DOS'\n+518F4A General Purpose Flag  0000 (0)\n+518F4C Compression Method    0000 (0) 'Stored'\n+518F4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518F52 CRC                   00000000 (0)\n+518F56 Compressed Size       00000000 (0)\n+518F5A Uncompressed Size     00000000 (0)\n+518F5E Filename Length       0026 (38)\n+518F60 Extra Length          0009 (9)\n+518F62 Comment Length        0000 (0)\n+518F64 Disk Start            0000 (0)\n+518F66 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518F68 Ext File Attributes   00000000 (0)\n+518F6C Local Header Offset   0006BEE3 (442083)\n+518F70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518F70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518F96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518F98   Length              0005 (5)\n+518F9A   Flags               01 (1) 'Modification'\n+518F9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+518F9F CENTRAL HEADER #193   02014B50 (33639248)\n+518FA3 Created Zip Spec      14 (20) '2.0'\n+518FA4 Created OS            00 (0) 'MS-DOS'\n+518FA5 Extract Zip Spec      14 (20) '2.0'\n+518FA6 Extract OS            00 (0) 'MS-DOS'\n+518FA7 General Purpose Flag  0000 (0)\n+518FA9 Compression Method    0000 (0) 'Stored'\n+518FAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+518FAF CRC                   00000000 (0)\n+518FB3 Compressed Size       00000000 (0)\n+518FB7 Uncompressed Size     00000000 (0)\n+518FBB Filename Length       002F (47)\n+518FBD Extra Length          0009 (9)\n+518FBF Comment Length        0000 (0)\n+518FC1 Disk Start            0000 (0)\n+518FC3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+518FC5 Ext File Attributes   00000000 (0)\n+518FC9 Local Header Offset   0006BF30 (442160)\n+518FCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x518FCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+518FFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+518FFE   Length              0005 (5)\n+519000   Flags               01 (1) 'Modification'\n+519001   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519005 CENTRAL HEADER #194   02014B50 (33639248)\n+519009 Created Zip Spec      14 (20) '2.0'\n+51900A Created OS            00 (0) 'MS-DOS'\n+51900B Extract Zip Spec      14 (20) '2.0'\n+51900C Extract OS            00 (0) 'MS-DOS'\n+51900D General Purpose Flag  0000 (0)\n+51900F Compression Method    0000 (0) 'Stored'\n+519011 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519015 CRC                   00000000 (0)\n+519019 Compressed Size       00000000 (0)\n+51901D Uncompressed Size     00000000 (0)\n+519021 Filename Length       005E (94)\n+519023 Extra Length          0009 (9)\n+519025 Comment Length        0000 (0)\n+519027 Disk Start            0000 (0)\n+519029 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51902B Ext File Attributes   00000000 (0)\n+51902F Local Header Offset   0006BF86 (442246)\n+519033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519091 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519093   Length              0005 (5)\n+519095   Flags               01 (1) 'Modification'\n+519096   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51909A CENTRAL HEADER #195   02014B50 (33639248)\n+51909E Created Zip Spec      14 (20) '2.0'\n+51909F Created OS            00 (0) 'MS-DOS'\n+5190A0 Extract Zip Spec      14 (20) '2.0'\n+5190A1 Extract OS            00 (0) 'MS-DOS'\n+5190A2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5190A4 Compression Method    0000 (0) 'Stored'\n+5190A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5190AA CRC                   357DA477 (897426551)\n+5190AE Compressed Size       000006C6 (1734)\n+5190B2 Uncompressed Size     000006C6 (1734)\n+5190B6 Filename Length       0074 (116)\n+5190B8 Extra Length          0009 (9)\n+5190BA Comment Length        0000 (0)\n+5190BC Disk Start            0000 (0)\n+5190BE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5190C0 Ext File Attributes   00000000 (0)\n+5190C4 Local Header Offset   0006C00B (442379)\n+5190C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5190C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51913C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51913E   Length              0005 (5)\n+519140   Flags               01 (1) 'Modification'\n+519141   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519145 CENTRAL HEADER #196   02014B50 (33639248)\n+519149 Created Zip Spec      14 (20) '2.0'\n+51914A Created OS            00 (0) 'MS-DOS'\n+51914B Extract Zip Spec      14 (20) '2.0'\n+51914C Extract OS            00 (0) 'MS-DOS'\n+51914D General Purpose Flag  0000 (0)\n+51914F Compression Method    0000 (0) 'Stored'\n+519151 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519155 CRC                   00000000 (0)\n+519159 Compressed Size       00000000 (0)\n+51915D Uncompressed Size     00000000 (0)\n+519161 Filename Length       005B (91)\n+519163 Extra Length          0009 (9)\n+519165 Comment Length        0000 (0)\n+519167 Disk Start            0000 (0)\n+519169 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51916B Ext File Attributes   00000000 (0)\n+51916F Local Header Offset   0006C77C (444284)\n+519173 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519173: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5191CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5191D0   Length              0005 (5)\n+5191D2   Flags               01 (1) 'Modification'\n+5191D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5191D7 CENTRAL HEADER #197   02014B50 (33639248)\n+5191DB Created Zip Spec      14 (20) '2.0'\n+5191DC Created OS            00 (0) 'MS-DOS'\n+5191DD Extract Zip Spec      14 (20) '2.0'\n+5191DE Extract OS            00 (0) 'MS-DOS'\n+5191DF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5191E1 Compression Method    0000 (0) 'Stored'\n+5191E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5191E7 CRC                   F9CAC97B (4190816635)\n+5191EB Compressed Size       000009BC (2492)\n+5191EF Uncompressed Size     000009BC (2492)\n+5191F3 Filename Length       0071 (113)\n+5191F5 Extra Length          0009 (9)\n+5191F7 Comment Length        0000 (0)\n+5191F9 Disk Start            0000 (0)\n+5191FB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5191FD Ext File Attributes   00000000 (0)\n+519201 Local Header Offset   0006C7FE (444414)\n+519205 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519205: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519276 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519278   Length              0005 (5)\n+51927A   Flags               01 (1) 'Modification'\n+51927B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51927F CENTRAL HEADER #198   02014B50 (33639248)\n+519283 Created Zip Spec      14 (20) '2.0'\n+519284 Created OS            00 (0) 'MS-DOS'\n+519285 Extract Zip Spec      14 (20) '2.0'\n+519286 Extract OS            00 (0) 'MS-DOS'\n+519287 General Purpose Flag  0000 (0)\n+519289 Compression Method    0000 (0) 'Stored'\n+51928B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51928F CRC                   00000000 (0)\n+519293 Compressed Size       00000000 (0)\n+519297 Uncompressed Size     00000000 (0)\n+51929B Filename Length       0061 (97)\n+51929D Extra Length          0009 (9)\n+51929F Comment Length        0000 (0)\n+5192A1 Disk Start            0000 (0)\n+5192A3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5192A5 Ext File Attributes   00000000 (0)\n+5192A9 Local Header Offset   0006D262 (447074)\n+5192AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5192AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51930E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519310   Length              0005 (5)\n+519312   Flags               01 (1) 'Modification'\n+519313   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519317 CENTRAL HEADER #199   02014B50 (33639248)\n+51931B Created Zip Spec      14 (20) '2.0'\n+51931C Created OS            00 (0) 'MS-DOS'\n+51931D Extract Zip Spec      14 (20) '2.0'\n+51931E Extract OS            00 (0) 'MS-DOS'\n+51931F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519321 Compression Method    0000 (0) 'Stored'\n+519323 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519327 CRC                   9DEB8C8B (2649459851)\n+51932B Compressed Size       00000A07 (2567)\n+51932F Uncompressed Size     00000A07 (2567)\n+519333 Filename Length       0077 (119)\n+519335 Extra Length          0009 (9)\n+519337 Comment Length        0000 (0)\n+519339 Disk Start            0000 (0)\n+51933B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51933D Ext File Attributes   00000000 (0)\n+519341 Local Header Offset   0006D2EA (447210)\n+519345 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519345: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5193BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5193BE   Length              0005 (5)\n+5193C0   Flags               01 (1) 'Modification'\n+5193C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5193C5 CENTRAL HEADER #200   02014B50 (33639248)\n+5193C9 Created Zip Spec      14 (20) '2.0'\n+5193CA Created OS            00 (0) 'MS-DOS'\n+5193CB Extract Zip Spec      14 (20) '2.0'\n+5193CC Extract OS            00 (0) 'MS-DOS'\n+5193CD General Purpose Flag  0000 (0)\n+5193CF Compression Method    0000 (0) 'Stored'\n+5193D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5193D5 CRC                   00000000 (0)\n+5193D9 Compressed Size       00000000 (0)\n+5193DD Uncompressed Size     00000000 (0)\n+5193E1 Filename Length       005B (91)\n+5193E3 Extra Length          0009 (9)\n+5193E5 Comment Length        0000 (0)\n+5193E7 Disk Start            0000 (0)\n+5193E9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5193EB Ext File Attributes   00000000 (0)\n+5193EF Local Header Offset   0006DD9F (449951)\n+5193F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5193F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51944E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519450   Length              0005 (5)\n+519452   Flags               01 (1) 'Modification'\n+519453   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519457 CENTRAL HEADER #201   02014B50 (33639248)\n+51945B Created Zip Spec      14 (20) '2.0'\n+51945C Created OS            00 (0) 'MS-DOS'\n+51945D Extract Zip Spec      14 (20) '2.0'\n+51945E Extract OS            00 (0) 'MS-DOS'\n+51945F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519461 Compression Method    0000 (0) 'Stored'\n+519463 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519467 CRC                   85B17459 (2242999385)\n+51946B Compressed Size       00000DDE (3550)\n+51946F Uncompressed Size     00000DDE (3550)\n+519473 Filename Length       0071 (113)\n+519475 Extra Length          0009 (9)\n+519477 Comment Length        0000 (0)\n+519479 Disk Start            0000 (0)\n+51947B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51947D Ext File Attributes   00000000 (0)\n+519481 Local Header Offset   0006DE21 (450081)\n+519485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5194F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5194F8   Length              0005 (5)\n+5194FA   Flags               01 (1) 'Modification'\n+5194FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5194FF CENTRAL HEADER #202   02014B50 (33639248)\n+519503 Created Zip Spec      14 (20) '2.0'\n+519504 Created OS            00 (0) 'MS-DOS'\n+519505 Extract Zip Spec      14 (20) '2.0'\n+519506 Extract OS            00 (0) 'MS-DOS'\n+519507 General Purpose Flag  0000 (0)\n+519509 Compression Method    0000 (0) 'Stored'\n+51950B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51950F CRC                   00000000 (0)\n+519513 Compressed Size       00000000 (0)\n+519517 Uncompressed Size     00000000 (0)\n+51951B Filename Length       0066 (102)\n+51951D Extra Length          0009 (9)\n+51951F Comment Length        0000 (0)\n+519521 Disk Start            0000 (0)\n+519523 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519525 Ext File Attributes   00000000 (0)\n+519529 Local Header Offset   0006ECA7 (453799)\n+51952D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51952D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519595   Length              0005 (5)\n+519597   Flags               01 (1) 'Modification'\n+519598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51959C CENTRAL HEADER #203   02014B50 (33639248)\n+5195A0 Created Zip Spec      14 (20) '2.0'\n+5195A1 Created OS            00 (0) 'MS-DOS'\n+5195A2 Extract Zip Spec      14 (20) '2.0'\n+5195A3 Extract OS            00 (0) 'MS-DOS'\n+5195A4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5195A6 Compression Method    0000 (0) 'Stored'\n+5195A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5195AC CRC                   9C229073 (2619510899)\n+5195B0 Compressed Size       000005CF (1487)\n+5195B4 Uncompressed Size     000005CF (1487)\n+5195B8 Filename Length       007C (124)\n+5195BA Extra Length          0009 (9)\n+5195BC Comment Length        0000 (0)\n+5195BE Disk Start            0000 (0)\n+5195C0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5195C2 Ext File Attributes   00000000 (0)\n+5195C6 Local Header Offset   0006ED34 (453940)\n+5195CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5195CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519646 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519648   Length              0005 (5)\n+51964A   Flags               01 (1) 'Modification'\n+51964B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51964F CENTRAL HEADER #204   02014B50 (33639248)\n+519653 Created Zip Spec      14 (20) '2.0'\n+519654 Created OS            00 (0) 'MS-DOS'\n+519655 Extract Zip Spec      14 (20) '2.0'\n+519656 Extract OS            00 (0) 'MS-DOS'\n+519657 General Purpose Flag  0000 (0)\n+519659 Compression Method    0000 (0) 'Stored'\n+51965B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51965F CRC                   00000000 (0)\n+519663 Compressed Size       00000000 (0)\n+519667 Uncompressed Size     00000000 (0)\n+51966B Filename Length       0066 (102)\n+51966D Extra Length          0009 (9)\n+51966F Comment Length        0000 (0)\n+519671 Disk Start            0000 (0)\n+519673 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519675 Ext File Attributes   00000000 (0)\n+519679 Local Header Offset   0006F3B6 (455606)\n+51967D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51967D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5196E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5196E5   Length              0005 (5)\n+5196E7   Flags               01 (1) 'Modification'\n+5196E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5196EC CENTRAL HEADER #205   02014B50 (33639248)\n+5196F0 Created Zip Spec      14 (20) '2.0'\n+5196F1 Created OS            00 (0) 'MS-DOS'\n+5196F2 Extract Zip Spec      14 (20) '2.0'\n+5196F3 Extract OS            00 (0) 'MS-DOS'\n+5196F4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5196F6 Compression Method    0000 (0) 'Stored'\n+5196F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5196FC CRC                   A57691CD (2776011213)\n+519700 Compressed Size       000005C2 (1474)\n+519704 Uncompressed Size     000005C2 (1474)\n+519708 Filename Length       007C (124)\n+51970A Extra Length          0009 (9)\n+51970C Comment Length        0000 (0)\n+51970E Disk Start            0000 (0)\n+519710 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519712 Ext File Attributes   00000000 (0)\n+519716 Local Header Offset   0006F443 (455747)\n+51971A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51971A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519796 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519798   Length              0005 (5)\n+51979A   Flags               01 (1) 'Modification'\n+51979B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51979F CENTRAL HEADER #206   02014B50 (33639248)\n+5197A3 Created Zip Spec      14 (20) '2.0'\n+5197A4 Created OS            00 (0) 'MS-DOS'\n+5197A5 Extract Zip Spec      14 (20) '2.0'\n+5197A6 Extract OS            00 (0) 'MS-DOS'\n+5197A7 General Purpose Flag  0000 (0)\n+5197A9 Compression Method    0000 (0) 'Stored'\n+5197AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5197AF CRC                   00000000 (0)\n+5197B3 Compressed Size       00000000 (0)\n+5197B7 Uncompressed Size     00000000 (0)\n+5197BB Filename Length       0065 (101)\n+5197BD Extra Length          0009 (9)\n+5197BF Comment Length        0000 (0)\n+5197C1 Disk Start            0000 (0)\n+5197C3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5197C5 Ext File Attributes   00000000 (0)\n+5197C9 Local Header Offset   0006FAB8 (457400)\n+5197CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5197CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519834   Length              0005 (5)\n+519836   Flags               01 (1) 'Modification'\n+519837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51983B CENTRAL HEADER #207   02014B50 (33639248)\n+51983F Created Zip Spec      14 (20) '2.0'\n+519840 Created OS            00 (0) 'MS-DOS'\n+519841 Extract Zip Spec      14 (20) '2.0'\n+519842 Extract OS            00 (0) 'MS-DOS'\n+519843 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519845 Compression Method    0000 (0) 'Stored'\n+519847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51984B CRC                   6CD31445 (1825772613)\n+51984F Compressed Size       0000073A (1850)\n+519853 Uncompressed Size     0000073A (1850)\n+519857 Filename Length       007B (123)\n+519859 Extra Length          0009 (9)\n+51985B Comment Length        0000 (0)\n+51985D Disk Start            0000 (0)\n+51985F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519861 Ext File Attributes   00000000 (0)\n+519865 Local Header Offset   0006FB44 (457540)\n+519869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5198E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5198E6   Length              0005 (5)\n+5198E8   Flags               01 (1) 'Modification'\n+5198E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5198ED CENTRAL HEADER #208   02014B50 (33639248)\n+5198F1 Created Zip Spec      14 (20) '2.0'\n+5198F2 Created OS            00 (0) 'MS-DOS'\n+5198F3 Extract Zip Spec      14 (20) '2.0'\n+5198F4 Extract OS            00 (0) 'MS-DOS'\n+5198F5 General Purpose Flag  0000 (0)\n+5198F7 Compression Method    0000 (0) 'Stored'\n+5198F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5198FD CRC                   00000000 (0)\n+519901 Compressed Size       00000000 (0)\n+519905 Uncompressed Size     00000000 (0)\n+519909 Filename Length       0063 (99)\n+51990B Extra Length          0009 (9)\n+51990D Comment Length        0000 (0)\n+51990F Disk Start            0000 (0)\n+519911 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519913 Ext File Attributes   00000000 (0)\n+519917 Local Header Offset   00070330 (459568)\n+51991B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51991B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51997E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519980   Length              0005 (5)\n+519982   Flags               01 (1) 'Modification'\n+519983   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519987 CENTRAL HEADER #209   02014B50 (33639248)\n+51998B Created Zip Spec      14 (20) '2.0'\n+51998C Created OS            00 (0) 'MS-DOS'\n+51998D Extract Zip Spec      14 (20) '2.0'\n+51998E Extract OS            00 (0) 'MS-DOS'\n+51998F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519991 Compression Method    0000 (0) 'Stored'\n+519993 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519997 CRC                   C97DF8D6 (3380476118)\n+51999B Compressed Size       00000A92 (2706)\n+51999F Uncompressed Size     00000A92 (2706)\n+5199A3 Filename Length       0079 (121)\n+5199A5 Extra Length          0009 (9)\n+5199A7 Comment Length        0000 (0)\n+5199A9 Disk Start            0000 (0)\n+5199AB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5199AD Ext File Attributes   00000000 (0)\n+5199B1 Local Header Offset   000703BA (459706)\n+5199B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5199B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519A2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519A30   Length              0005 (5)\n+519A32   Flags               01 (1) 'Modification'\n+519A33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519A37 CENTRAL HEADER #210   02014B50 (33639248)\n+519A3B Created Zip Spec      14 (20) '2.0'\n+519A3C Created OS            00 (0) 'MS-DOS'\n+519A3D Extract Zip Spec      14 (20) '2.0'\n+519A3E Extract OS            00 (0) 'MS-DOS'\n+519A3F General Purpose Flag  0000 (0)\n+519A41 Compression Method    0000 (0) 'Stored'\n+519A43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519A47 CRC                   00000000 (0)\n+519A4B Compressed Size       00000000 (0)\n+519A4F Uncompressed Size     00000000 (0)\n+519A53 Filename Length       0023 (35)\n+519A55 Extra Length          0009 (9)\n+519A57 Comment Length        0000 (0)\n+519A59 Disk Start            0000 (0)\n+519A5B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519A5D Ext File Attributes   00000000 (0)\n+519A61 Local Header Offset   00070EFC (462588)\n+519A65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519A65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519A88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519A8A   Length              0005 (5)\n+519A8C   Flags               01 (1) 'Modification'\n+519A8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519A91 CENTRAL HEADER #211   02014B50 (33639248)\n+519A95 Created Zip Spec      14 (20) '2.0'\n+519A96 Created OS            00 (0) 'MS-DOS'\n+519A97 Extract Zip Spec      14 (20) '2.0'\n+519A98 Extract OS            00 (0) 'MS-DOS'\n+519A99 General Purpose Flag  0000 (0)\n+519A9B Compression Method    0000 (0) 'Stored'\n+519A9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519AA1 CRC                   00000000 (0)\n+519AA5 Compressed Size       00000000 (0)\n+519AA9 Uncompressed Size     00000000 (0)\n+519AAD Filename Length       002C (44)\n+519AAF Extra Length          0009 (9)\n+519AB1 Comment Length        0000 (0)\n+519AB3 Disk Start            0000 (0)\n+519AB5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519AB7 Ext File Attributes   00000000 (0)\n+519ABB Local Header Offset   00070F46 (462662)\n+519ABF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519ABF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519AEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519AED   Length              0005 (5)\n+519AEF   Flags               01 (1) 'Modification'\n+519AF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519AF4 CENTRAL HEADER #212   02014B50 (33639248)\n+519AF8 Created Zip Spec      14 (20) '2.0'\n+519AF9 Created OS            00 (0) 'MS-DOS'\n+519AFA Extract Zip Spec      14 (20) '2.0'\n+519AFB Extract OS            00 (0) 'MS-DOS'\n+519AFC General Purpose Flag  0000 (0)\n+519AFE Compression Method    0000 (0) 'Stored'\n+519B00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519B04 CRC                   00000000 (0)\n+519B08 Compressed Size       00000000 (0)\n+519B0C Uncompressed Size     00000000 (0)\n+519B10 Filename Length       0058 (88)\n+519B12 Extra Length          0009 (9)\n+519B14 Comment Length        0000 (0)\n+519B16 Disk Start            0000 (0)\n+519B18 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519B1A Ext File Attributes   00000000 (0)\n+519B1E Local Header Offset   00070F99 (462745)\n+519B22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519B22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519B7A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519B7C   Length              0005 (5)\n+519B7E   Flags               01 (1) 'Modification'\n+519B7F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519B83 CENTRAL HEADER #213   02014B50 (33639248)\n+519B87 Created Zip Spec      14 (20) '2.0'\n+519B88 Created OS            00 (0) 'MS-DOS'\n+519B89 Extract Zip Spec      14 (20) '2.0'\n+519B8A Extract OS            00 (0) 'MS-DOS'\n+519B8B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519B8D Compression Method    0000 (0) 'Stored'\n+519B8F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519B93 CRC                   0B04A112 (184852754)\n+519B97 Compressed Size       00000795 (1941)\n+519B9B Uncompressed Size     00000795 (1941)\n+519B9F Filename Length       006E (110)\n+519BA1 Extra Length          0009 (9)\n+519BA3 Comment Length        0000 (0)\n+519BA5 Disk Start            0000 (0)\n+519BA7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519BA9 Ext File Attributes   00000000 (0)\n+519BAD Local Header Offset   00071018 (462872)\n+519BB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519BB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519C1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519C21   Length              0005 (5)\n+519C23   Flags               01 (1) 'Modification'\n+519C24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519C28 CENTRAL HEADER #214   02014B50 (33639248)\n+519C2C Created Zip Spec      14 (20) '2.0'\n+519C2D Created OS            00 (0) 'MS-DOS'\n+519C2E Extract Zip Spec      14 (20) '2.0'\n+519C2F Extract OS            00 (0) 'MS-DOS'\n+519C30 General Purpose Flag  0000 (0)\n+519C32 Compression Method    0000 (0) 'Stored'\n+519C34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519C38 CRC                   00000000 (0)\n+519C3C Compressed Size       00000000 (0)\n+519C40 Uncompressed Size     00000000 (0)\n+519C44 Filename Length       0031 (49)\n+519C46 Extra Length          0009 (9)\n+519C48 Comment Length        0000 (0)\n+519C4A Disk Start            0000 (0)\n+519C4C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519C4E Ext File Attributes   00000000 (0)\n+519C52 Local Header Offset   00071852 (464978)\n+519C56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519C56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519C87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519C89   Length              0005 (5)\n+519C8B   Flags               01 (1) 'Modification'\n+519C8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519C90 CENTRAL HEADER #215   02014B50 (33639248)\n+519C94 Created Zip Spec      14 (20) '2.0'\n+519C95 Created OS            00 (0) 'MS-DOS'\n+519C96 Extract Zip Spec      14 (20) '2.0'\n+519C97 Extract OS            00 (0) 'MS-DOS'\n+519C98 General Purpose Flag  0000 (0)\n+519C9A Compression Method    0000 (0) 'Stored'\n+519C9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519CA0 CRC                   00000000 (0)\n+519CA4 Compressed Size       00000000 (0)\n+519CA8 Uncompressed Size     00000000 (0)\n+519CAC Filename Length       003A (58)\n+519CAE Extra Length          0009 (9)\n+519CB0 Comment Length        0000 (0)\n+519CB2 Disk Start            0000 (0)\n+519CB4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519CB6 Ext File Attributes   00000000 (0)\n+519CBA Local Header Offset   000718AA (465066)\n+519CBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519CBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519CF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519CFA   Length              0005 (5)\n+519CFC   Flags               01 (1) 'Modification'\n+519CFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519D01 CENTRAL HEADER #216   02014B50 (33639248)\n+519D05 Created Zip Spec      14 (20) '2.0'\n+519D06 Created OS            00 (0) 'MS-DOS'\n+519D07 Extract Zip Spec      14 (20) '2.0'\n+519D08 Extract OS            00 (0) 'MS-DOS'\n+519D09 General Purpose Flag  0000 (0)\n+519D0B Compression Method    0000 (0) 'Stored'\n+519D0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519D11 CRC                   00000000 (0)\n+519D15 Compressed Size       00000000 (0)\n+519D19 Uncompressed Size     00000000 (0)\n+519D1D Filename Length       006C (108)\n+519D1F Extra Length          0009 (9)\n+519D21 Comment Length        0000 (0)\n+519D23 Disk Start            0000 (0)\n+519D25 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519D27 Ext File Attributes   00000000 (0)\n+519D2B Local Header Offset   0007190B (465163)\n+519D2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519D2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519D9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519D9D   Length              0005 (5)\n+519D9F   Flags               01 (1) 'Modification'\n+519DA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519DA4 CENTRAL HEADER #217   02014B50 (33639248)\n+519DA8 Created Zip Spec      14 (20) '2.0'\n+519DA9 Created OS            00 (0) 'MS-DOS'\n+519DAA Extract Zip Spec      14 (20) '2.0'\n+519DAB Extract OS            00 (0) 'MS-DOS'\n+519DAC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519DAE Compression Method    0000 (0) 'Stored'\n+519DB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519DB4 CRC                   9A51A289 (2589041289)\n+519DB8 Compressed Size       000008AB (2219)\n+519DBC Uncompressed Size     000008AB (2219)\n+519DC0 Filename Length       0082 (130)\n+519DC2 Extra Length          0009 (9)\n+519DC4 Comment Length        0000 (0)\n+519DC6 Disk Start            0000 (0)\n+519DC8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519DCA Ext File Attributes   00000000 (0)\n+519DCE Local Header Offset   0007199E (465310)\n+519DD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519DD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519E54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519E56   Length              0005 (5)\n+519E58   Flags               01 (1) 'Modification'\n+519E59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519E5D CENTRAL HEADER #218   02014B50 (33639248)\n+519E61 Created Zip Spec      14 (20) '2.0'\n+519E62 Created OS            00 (0) 'MS-DOS'\n+519E63 Extract Zip Spec      14 (20) '2.0'\n+519E64 Extract OS            00 (0) 'MS-DOS'\n+519E65 General Purpose Flag  0000 (0)\n+519E67 Compression Method    0000 (0) 'Stored'\n+519E69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519E6D CRC                   00000000 (0)\n+519E71 Compressed Size       00000000 (0)\n+519E75 Uncompressed Size     00000000 (0)\n+519E79 Filename Length       0022 (34)\n+519E7B Extra Length          0009 (9)\n+519E7D Comment Length        0000 (0)\n+519E7F Disk Start            0000 (0)\n+519E81 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519E83 Ext File Attributes   00000000 (0)\n+519E87 Local Header Offset   00072302 (467714)\n+519E8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519E8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519EAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519EAF   Length              0005 (5)\n+519EB1   Flags               01 (1) 'Modification'\n+519EB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519EB6 CENTRAL HEADER #219   02014B50 (33639248)\n+519EBA Created Zip Spec      14 (20) '2.0'\n+519EBB Created OS            00 (0) 'MS-DOS'\n+519EBC Extract Zip Spec      14 (20) '2.0'\n+519EBD Extract OS            00 (0) 'MS-DOS'\n+519EBE General Purpose Flag  0000 (0)\n+519EC0 Compression Method    0000 (0) 'Stored'\n+519EC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519EC6 CRC                   00000000 (0)\n+519ECA Compressed Size       00000000 (0)\n+519ECE Uncompressed Size     00000000 (0)\n+519ED2 Filename Length       002B (43)\n+519ED4 Extra Length          0009 (9)\n+519ED6 Comment Length        0000 (0)\n+519ED8 Disk Start            0000 (0)\n+519EDA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519EDC Ext File Attributes   00000000 (0)\n+519EE0 Local Header Offset   0007234B (467787)\n+519EE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519EE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519F0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519F11   Length              0005 (5)\n+519F13   Flags               01 (1) 'Modification'\n+519F14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519F18 CENTRAL HEADER #220   02014B50 (33639248)\n+519F1C Created Zip Spec      14 (20) '2.0'\n+519F1D Created OS            00 (0) 'MS-DOS'\n+519F1E Extract Zip Spec      14 (20) '2.0'\n+519F1F Extract OS            00 (0) 'MS-DOS'\n+519F20 General Purpose Flag  0000 (0)\n+519F22 Compression Method    0000 (0) 'Stored'\n+519F24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519F28 CRC                   00000000 (0)\n+519F2C Compressed Size       00000000 (0)\n+519F30 Uncompressed Size     00000000 (0)\n+519F34 Filename Length       004D (77)\n+519F36 Extra Length          0009 (9)\n+519F38 Comment Length        0000 (0)\n+519F3A Disk Start            0000 (0)\n+519F3C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519F3E Ext File Attributes   00000000 (0)\n+519F42 Local Header Offset   0007239D (467869)\n+519F46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519F46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+519F93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+519F95   Length              0005 (5)\n+519F97   Flags               01 (1) 'Modification'\n+519F98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+519F9C CENTRAL HEADER #221   02014B50 (33639248)\n+519FA0 Created Zip Spec      14 (20) '2.0'\n+519FA1 Created OS            00 (0) 'MS-DOS'\n+519FA2 Extract Zip Spec      14 (20) '2.0'\n+519FA3 Extract OS            00 (0) 'MS-DOS'\n+519FA4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+519FA6 Compression Method    0000 (0) 'Stored'\n+519FA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+519FAC CRC                   BEAE3D9C (3199090076)\n+519FB0 Compressed Size       0000396F (14703)\n+519FB4 Uncompressed Size     0000396F (14703)\n+519FB8 Filename Length       0063 (99)\n+519FBA Extra Length          0009 (9)\n+519FBC Comment Length        0000 (0)\n+519FBE Disk Start            0000 (0)\n+519FC0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+519FC2 Ext File Attributes   00000000 (0)\n+519FC6 Local Header Offset   00072411 (467985)\n+519FCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x519FCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A02D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A02F   Length              0005 (5)\n+51A031   Flags               01 (1) 'Modification'\n+51A032   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A036 CENTRAL HEADER #222   02014B50 (33639248)\n+51A03A Created Zip Spec      14 (20) '2.0'\n+51A03B Created OS            00 (0) 'MS-DOS'\n+51A03C Extract Zip Spec      14 (20) '2.0'\n+51A03D Extract OS            00 (0) 'MS-DOS'\n+51A03E General Purpose Flag  0000 (0)\n+51A040 Compression Method    0000 (0) 'Stored'\n+51A042 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A046 CRC                   00000000 (0)\n+51A04A Compressed Size       00000000 (0)\n+51A04E Uncompressed Size     00000000 (0)\n+51A052 Filename Length       0030 (48)\n+51A054 Extra Length          0009 (9)\n+51A056 Comment Length        0000 (0)\n+51A058 Disk Start            0000 (0)\n+51A05A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A05C Ext File Attributes   00000000 (0)\n+51A060 Local Header Offset   00075E1A (482842)\n+51A064 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A064: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A094 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A096   Length              0005 (5)\n+51A098   Flags               01 (1) 'Modification'\n+51A099   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A09D CENTRAL HEADER #223   02014B50 (33639248)\n+51A0A1 Created Zip Spec      14 (20) '2.0'\n+51A0A2 Created OS            00 (0) 'MS-DOS'\n+51A0A3 Extract Zip Spec      14 (20) '2.0'\n+51A0A4 Extract OS            00 (0) 'MS-DOS'\n+51A0A5 General Purpose Flag  0000 (0)\n+51A0A7 Compression Method    0000 (0) 'Stored'\n+51A0A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A0AD CRC                   00000000 (0)\n+51A0B1 Compressed Size       00000000 (0)\n+51A0B5 Uncompressed Size     00000000 (0)\n+51A0B9 Filename Length       0039 (57)\n+51A0BB Extra Length          0009 (9)\n+51A0BD Comment Length        0000 (0)\n+51A0BF Disk Start            0000 (0)\n+51A0C1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A0C3 Ext File Attributes   00000000 (0)\n+51A0C7 Local Header Offset   00075E71 (482929)\n+51A0CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A0CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A104 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A106   Length              0005 (5)\n+51A108   Flags               01 (1) 'Modification'\n+51A109   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A10D CENTRAL HEADER #224   02014B50 (33639248)\n+51A111 Created Zip Spec      14 (20) '2.0'\n+51A112 Created OS            00 (0) 'MS-DOS'\n+51A113 Extract Zip Spec      14 (20) '2.0'\n+51A114 Extract OS            00 (0) 'MS-DOS'\n+51A115 General Purpose Flag  0000 (0)\n+51A117 Compression Method    0000 (0) 'Stored'\n+51A119 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A11D CRC                   00000000 (0)\n+51A121 Compressed Size       00000000 (0)\n+51A125 Uncompressed Size     00000000 (0)\n+51A129 Filename Length       006A (106)\n+51A12B Extra Length          0009 (9)\n+51A12D Comment Length        0000 (0)\n+51A12F Disk Start            0000 (0)\n+51A131 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A133 Ext File Attributes   00000000 (0)\n+51A137 Local Header Offset   00075ED1 (483025)\n+51A13B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A13B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A1A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A1A7   Length              0005 (5)\n+51A1A9   Flags               01 (1) 'Modification'\n+51A1AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A1AE CENTRAL HEADER #225   02014B50 (33639248)\n+51A1B2 Created Zip Spec      14 (20) '2.0'\n+51A1B3 Created OS            00 (0) 'MS-DOS'\n+51A1B4 Extract Zip Spec      14 (20) '2.0'\n+51A1B5 Extract OS            00 (0) 'MS-DOS'\n+51A1B6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A1B8 Compression Method    0000 (0) 'Stored'\n+51A1BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A1BE CRC                   29D620BA (701898938)\n+51A1C2 Compressed Size       00002421 (9249)\n+51A1C6 Uncompressed Size     00002421 (9249)\n+51A1CA Filename Length       0080 (128)\n+51A1CC Extra Length          0009 (9)\n+51A1CE Comment Length        0000 (0)\n+51A1D0 Disk Start            0000 (0)\n+51A1D2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A1D4 Ext File Attributes   00000000 (0)\n+51A1D8 Local Header Offset   00075F62 (483170)\n+51A1DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A1DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A25C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A25E   Length              0005 (5)\n+51A260   Flags               01 (1) 'Modification'\n+51A261   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A265 CENTRAL HEADER #226   02014B50 (33639248)\n+51A269 Created Zip Spec      14 (20) '2.0'\n+51A26A Created OS            00 (0) 'MS-DOS'\n+51A26B Extract Zip Spec      14 (20) '2.0'\n+51A26C Extract OS            00 (0) 'MS-DOS'\n+51A26D General Purpose Flag  0000 (0)\n+51A26F Compression Method    0000 (0) 'Stored'\n+51A271 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A275 CRC                   00000000 (0)\n+51A279 Compressed Size       00000000 (0)\n+51A27D Uncompressed Size     00000000 (0)\n+51A281 Filename Length       003C (60)\n+51A283 Extra Length          0009 (9)\n+51A285 Comment Length        0000 (0)\n+51A287 Disk Start            0000 (0)\n+51A289 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A28B Ext File Attributes   00000000 (0)\n+51A28F Local Header Offset   0007843A (492602)\n+51A293 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A293: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A2CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A2D1   Length              0005 (5)\n+51A2D3   Flags               01 (1) 'Modification'\n+51A2D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A2D8 CENTRAL HEADER #227   02014B50 (33639248)\n+51A2DC Created Zip Spec      14 (20) '2.0'\n+51A2DD Created OS            00 (0) 'MS-DOS'\n+51A2DE Extract Zip Spec      14 (20) '2.0'\n+51A2DF Extract OS            00 (0) 'MS-DOS'\n+51A2E0 General Purpose Flag  0000 (0)\n+51A2E2 Compression Method    0000 (0) 'Stored'\n+51A2E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A2E8 CRC                   00000000 (0)\n+51A2EC Compressed Size       00000000 (0)\n+51A2F0 Uncompressed Size     00000000 (0)\n+51A2F4 Filename Length       0045 (69)\n+51A2F6 Extra Length          0009 (9)\n+51A2F8 Comment Length        0000 (0)\n+51A2FA Disk Start            0000 (0)\n+51A2FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A2FE Ext File Attributes   00000000 (0)\n+51A302 Local Header Offset   0007849D (492701)\n+51A306 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A306: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A34B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A34D   Length              0005 (5)\n+51A34F   Flags               01 (1) 'Modification'\n+51A350   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A354 CENTRAL HEADER #228   02014B50 (33639248)\n+51A358 Created Zip Spec      14 (20) '2.0'\n+51A359 Created OS            00 (0) 'MS-DOS'\n+51A35A Extract Zip Spec      14 (20) '2.0'\n+51A35B Extract OS            00 (0) 'MS-DOS'\n+51A35C General Purpose Flag  0000 (0)\n+51A35E Compression Method    0000 (0) 'Stored'\n+51A360 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A364 CRC                   00000000 (0)\n+51A368 Compressed Size       00000000 (0)\n+51A36C Uncompressed Size     00000000 (0)\n+51A370 Filename Length       0063 (99)\n+51A372 Extra Length          0009 (9)\n+51A374 Comment Length        0000 (0)\n+51A376 Disk Start            0000 (0)\n+51A378 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A37A Ext File Attributes   00000000 (0)\n+51A37E Local Header Offset   00078509 (492809)\n+51A382 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A382: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A3E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A3E7   Length              0005 (5)\n+51A3E9   Flags               01 (1) 'Modification'\n+51A3EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A3EE CENTRAL HEADER #229   02014B50 (33639248)\n+51A3F2 Created Zip Spec      14 (20) '2.0'\n+51A3F3 Created OS            00 (0) 'MS-DOS'\n+51A3F4 Extract Zip Spec      14 (20) '2.0'\n+51A3F5 Extract OS            00 (0) 'MS-DOS'\n+51A3F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A3F8 Compression Method    0000 (0) 'Stored'\n+51A3FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A3FE CRC                   9ED7BE90 (2664939152)\n+51A402 Compressed Size       000036E7 (14055)\n+51A406 Uncompressed Size     000036E7 (14055)\n+51A40A Filename Length       0079 (121)\n+51A40C Extra Length          0009 (9)\n+51A40E Comment Length        0000 (0)\n+51A410 Disk Start            0000 (0)\n+51A412 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A414 Ext File Attributes   00000000 (0)\n+51A418 Local Header Offset   00078593 (492947)\n+51A41C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A41C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A495 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A497   Length              0005 (5)\n+51A499   Flags               01 (1) 'Modification'\n+51A49A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A49E CENTRAL HEADER #230   02014B50 (33639248)\n+51A4A2 Created Zip Spec      14 (20) '2.0'\n+51A4A3 Created OS            00 (0) 'MS-DOS'\n+51A4A4 Extract Zip Spec      14 (20) '2.0'\n+51A4A5 Extract OS            00 (0) 'MS-DOS'\n+51A4A6 General Purpose Flag  0000 (0)\n+51A4A8 Compression Method    0000 (0) 'Stored'\n+51A4AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A4AE CRC                   00000000 (0)\n+51A4B2 Compressed Size       00000000 (0)\n+51A4B6 Uncompressed Size     00000000 (0)\n+51A4BA Filename Length       0063 (99)\n+51A4BC Extra Length          0009 (9)\n+51A4BE Comment Length        0000 (0)\n+51A4C0 Disk Start            0000 (0)\n+51A4C2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A4C4 Ext File Attributes   00000000 (0)\n+51A4C8 Local Header Offset   0007BD2A (507178)\n+51A4CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A4CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A52F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A531   Length              0005 (5)\n+51A533   Flags               01 (1) 'Modification'\n+51A534   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A538 CENTRAL HEADER #231   02014B50 (33639248)\n+51A53C Created Zip Spec      14 (20) '2.0'\n+51A53D Created OS            00 (0) 'MS-DOS'\n+51A53E Extract Zip Spec      14 (20) '2.0'\n+51A53F Extract OS            00 (0) 'MS-DOS'\n+51A540 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A542 Compression Method    0000 (0) 'Stored'\n+51A544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A548 CRC                   B51FDD91 (3038764433)\n+51A54C Compressed Size       00004792 (18322)\n+51A550 Uncompressed Size     00004792 (18322)\n+51A554 Filename Length       0079 (121)\n+51A556 Extra Length          0009 (9)\n+51A558 Comment Length        0000 (0)\n+51A55A Disk Start            0000 (0)\n+51A55C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A55E Ext File Attributes   00000000 (0)\n+51A562 Local Header Offset   0007BDB4 (507316)\n+51A566 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A566: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A5DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A5E1   Length              0005 (5)\n+51A5E3   Flags               01 (1) 'Modification'\n+51A5E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A5E8 CENTRAL HEADER #232   02014B50 (33639248)\n+51A5EC Created Zip Spec      14 (20) '2.0'\n+51A5ED Created OS            00 (0) 'MS-DOS'\n+51A5EE Extract Zip Spec      14 (20) '2.0'\n+51A5EF Extract OS            00 (0) 'MS-DOS'\n+51A5F0 General Purpose Flag  0000 (0)\n+51A5F2 Compression Method    0000 (0) 'Stored'\n+51A5F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A5F8 CRC                   00000000 (0)\n+51A5FC Compressed Size       00000000 (0)\n+51A600 Uncompressed Size     00000000 (0)\n+51A604 Filename Length       0065 (101)\n+51A606 Extra Length          0009 (9)\n+51A608 Comment Length        0000 (0)\n+51A60A Disk Start            0000 (0)\n+51A60C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A60E Ext File Attributes   00000000 (0)\n+51A612 Local Header Offset   000805F6 (525814)\n+51A616 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A616: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A67B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A67D   Length              0005 (5)\n+51A67F   Flags               01 (1) 'Modification'\n+51A680   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A684 CENTRAL HEADER #233   02014B50 (33639248)\n+51A688 Created Zip Spec      14 (20) '2.0'\n+51A689 Created OS            00 (0) 'MS-DOS'\n+51A68A Extract Zip Spec      14 (20) '2.0'\n+51A68B Extract OS            00 (0) 'MS-DOS'\n+51A68C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A68E Compression Method    0000 (0) 'Stored'\n+51A690 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A694 CRC                   27CFA48B (667919499)\n+51A698 Compressed Size       00005DDC (24028)\n+51A69C Uncompressed Size     00005DDC (24028)\n+51A6A0 Filename Length       007B (123)\n+51A6A2 Extra Length          0009 (9)\n+51A6A4 Comment Length        0000 (0)\n+51A6A6 Disk Start            0000 (0)\n+51A6A8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A6AA Ext File Attributes   00000000 (0)\n+51A6AE Local Header Offset   00080682 (525954)\n+51A6B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A6B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A72D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A72F   Length              0005 (5)\n+51A731   Flags               01 (1) 'Modification'\n+51A732   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A736 CENTRAL HEADER #234   02014B50 (33639248)\n+51A73A Created Zip Spec      14 (20) '2.0'\n+51A73B Created OS            00 (0) 'MS-DOS'\n+51A73C Extract Zip Spec      14 (20) '2.0'\n+51A73D Extract OS            00 (0) 'MS-DOS'\n+51A73E General Purpose Flag  0000 (0)\n+51A740 Compression Method    0000 (0) 'Stored'\n+51A742 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A746 CRC                   00000000 (0)\n+51A74A Compressed Size       00000000 (0)\n+51A74E Uncompressed Size     00000000 (0)\n+51A752 Filename Length       0069 (105)\n+51A754 Extra Length          0009 (9)\n+51A756 Comment Length        0000 (0)\n+51A758 Disk Start            0000 (0)\n+51A75A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A75C Ext File Attributes   00000000 (0)\n+51A760 Local Header Offset   00086510 (550160)\n+51A764 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A764: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A7CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A7CF   Length              0005 (5)\n+51A7D1   Flags               01 (1) 'Modification'\n+51A7D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A7D6 CENTRAL HEADER #235   02014B50 (33639248)\n+51A7DA Created Zip Spec      14 (20) '2.0'\n+51A7DB Created OS            00 (0) 'MS-DOS'\n+51A7DC Extract Zip Spec      14 (20) '2.0'\n+51A7DD Extract OS            00 (0) 'MS-DOS'\n+51A7DE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A7E0 Compression Method    0000 (0) 'Stored'\n+51A7E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A7E6 CRC                   620AB78F (1644869519)\n+51A7EA Compressed Size       00003B3A (15162)\n+51A7EE Uncompressed Size     00003B3A (15162)\n+51A7F2 Filename Length       007F (127)\n+51A7F4 Extra Length          0009 (9)\n+51A7F6 Comment Length        0000 (0)\n+51A7F8 Disk Start            0000 (0)\n+51A7FA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A7FC Ext File Attributes   00000000 (0)\n+51A800 Local Header Offset   000865A0 (550304)\n+51A804 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A804: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A883 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A885   Length              0005 (5)\n+51A887   Flags               01 (1) 'Modification'\n+51A888   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A88C CENTRAL HEADER #236   02014B50 (33639248)\n+51A890 Created Zip Spec      14 (20) '2.0'\n+51A891 Created OS            00 (0) 'MS-DOS'\n+51A892 Extract Zip Spec      14 (20) '2.0'\n+51A893 Extract OS            00 (0) 'MS-DOS'\n+51A894 General Purpose Flag  0000 (0)\n+51A896 Compression Method    0000 (0) 'Stored'\n+51A898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A89C CRC                   00000000 (0)\n+51A8A0 Compressed Size       00000000 (0)\n+51A8A4 Uncompressed Size     00000000 (0)\n+51A8A8 Filename Length       0069 (105)\n+51A8AA Extra Length          0009 (9)\n+51A8AC Comment Length        0000 (0)\n+51A8AE Disk Start            0000 (0)\n+51A8B0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A8B2 Ext File Attributes   00000000 (0)\n+51A8B6 Local Header Offset   0008A190 (565648)\n+51A8BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A8BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A923 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A925   Length              0005 (5)\n+51A927   Flags               01 (1) 'Modification'\n+51A928   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A92C CENTRAL HEADER #237   02014B50 (33639248)\n+51A930 Created Zip Spec      14 (20) '2.0'\n+51A931 Created OS            00 (0) 'MS-DOS'\n+51A932 Extract Zip Spec      14 (20) '2.0'\n+51A933 Extract OS            00 (0) 'MS-DOS'\n+51A934 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51A936 Compression Method    0000 (0) 'Stored'\n+51A938 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A93C CRC                   937A07E6 (2474248166)\n+51A940 Compressed Size       00004869 (18537)\n+51A944 Uncompressed Size     00004869 (18537)\n+51A948 Filename Length       007F (127)\n+51A94A Extra Length          0009 (9)\n+51A94C Comment Length        0000 (0)\n+51A94E Disk Start            0000 (0)\n+51A950 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51A952 Ext File Attributes   00000000 (0)\n+51A956 Local Header Offset   0008A220 (565792)\n+51A95A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51A95A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51A9D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51A9DB   Length              0005 (5)\n+51A9DD   Flags               01 (1) 'Modification'\n+51A9DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51A9E2 CENTRAL HEADER #238   02014B50 (33639248)\n+51A9E6 Created Zip Spec      14 (20) '2.0'\n+51A9E7 Created OS            00 (0) 'MS-DOS'\n+51A9E8 Extract Zip Spec      14 (20) '2.0'\n+51A9E9 Extract OS            00 (0) 'MS-DOS'\n+51A9EA General Purpose Flag  0000 (0)\n+51A9EC Compression Method    0000 (0) 'Stored'\n+51A9EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51A9F2 CRC                   00000000 (0)\n+51A9F6 Compressed Size       00000000 (0)\n+51A9FA Uncompressed Size     00000000 (0)\n+51A9FE Filename Length       006D (109)\n+51AA00 Extra Length          0009 (9)\n+51AA02 Comment Length        0000 (0)\n+51AA04 Disk Start            0000 (0)\n+51AA06 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AA08 Ext File Attributes   00000000 (0)\n+51AA0C Local Header Offset   0008EB3F (584511)\n+51AA10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AA10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AA7D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AA7F   Length              0005 (5)\n+51AA81   Flags               01 (1) 'Modification'\n+51AA82   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AA86 CENTRAL HEADER #239   02014B50 (33639248)\n+51AA8A Created Zip Spec      14 (20) '2.0'\n+51AA8B Created OS            00 (0) 'MS-DOS'\n+51AA8C Extract Zip Spec      14 (20) '2.0'\n+51AA8D Extract OS            00 (0) 'MS-DOS'\n+51AA8E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51AA90 Compression Method    0000 (0) 'Stored'\n+51AA92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AA96 CRC                   53DFF1D7 (1407185367)\n+51AA9A Compressed Size       00000ADF (2783)\n+51AA9E Uncompressed Size     00000ADF (2783)\n+51AAA2 Filename Length       0083 (131)\n+51AAA4 Extra Length          0009 (9)\n+51AAA6 Comment Length        0000 (0)\n+51AAA8 Disk Start            0000 (0)\n+51AAAA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AAAC Ext File Attributes   00000000 (0)\n+51AAB0 Local Header Offset   0008EBD3 (584659)\n+51AAB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AAB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AB37 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AB39   Length              0005 (5)\n+51AB3B   Flags               01 (1) 'Modification'\n+51AB3C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AB40 CENTRAL HEADER #240   02014B50 (33639248)\n+51AB44 Created Zip Spec      14 (20) '2.0'\n+51AB45 Created OS            00 (0) 'MS-DOS'\n+51AB46 Extract Zip Spec      14 (20) '2.0'\n+51AB47 Extract OS            00 (0) 'MS-DOS'\n+51AB48 General Purpose Flag  0000 (0)\n+51AB4A Compression Method    0000 (0) 'Stored'\n+51AB4C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AB50 CRC                   00000000 (0)\n+51AB54 Compressed Size       00000000 (0)\n+51AB58 Uncompressed Size     00000000 (0)\n+51AB5C Filename Length       0069 (105)\n+51AB5E Extra Length          0009 (9)\n+51AB60 Comment Length        0000 (0)\n+51AB62 Disk Start            0000 (0)\n+51AB64 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AB66 Ext File Attributes   00000000 (0)\n+51AB6A Local Header Offset   0008F76C (587628)\n+51AB6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AB6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51ABD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51ABD9   Length              0005 (5)\n+51ABDB   Flags               01 (1) 'Modification'\n+51ABDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51ABE0 CENTRAL HEADER #241   02014B50 (33639248)\n+51ABE4 Created Zip Spec      14 (20) '2.0'\n+51ABE5 Created OS            00 (0) 'MS-DOS'\n+51ABE6 Extract Zip Spec      14 (20) '2.0'\n+51ABE7 Extract OS            00 (0) 'MS-DOS'\n+51ABE8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51ABEA Compression Method    0000 (0) 'Stored'\n+51ABEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51ABF0 CRC                   6D3A5445 (1832539205)\n+51ABF4 Compressed Size       00000939 (2361)\n+51ABF8 Uncompressed Size     00000939 (2361)\n+51ABFC Filename Length       007F (127)\n+51ABFE Extra Length          0009 (9)\n+51AC00 Comment Length        0000 (0)\n+51AC02 Disk Start            0000 (0)\n+51AC04 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AC06 Ext File Attributes   00000000 (0)\n+51AC0A Local Header Offset   0008F7FC (587772)\n+51AC0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AC0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AC8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AC8F   Length              0005 (5)\n+51AC91   Flags               01 (1) 'Modification'\n+51AC92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AC96 CENTRAL HEADER #242   02014B50 (33639248)\n+51AC9A Created Zip Spec      14 (20) '2.0'\n+51AC9B Created OS            00 (0) 'MS-DOS'\n+51AC9C Extract Zip Spec      14 (20) '2.0'\n+51AC9D Extract OS            00 (0) 'MS-DOS'\n+51AC9E General Purpose Flag  0000 (0)\n+51ACA0 Compression Method    0000 (0) 'Stored'\n+51ACA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51ACA6 CRC                   00000000 (0)\n+51ACAA Compressed Size       00000000 (0)\n+51ACAE Uncompressed Size     00000000 (0)\n+51ACB2 Filename Length       0078 (120)\n+51ACB4 Extra Length          0009 (9)\n+51ACB6 Comment Length        0000 (0)\n+51ACB8 Disk Start            0000 (0)\n+51ACBA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51ACBC Ext File Attributes   00000000 (0)\n+51ACC0 Local Header Offset   000901EB (590315)\n+51ACC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51ACC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AD3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AD3E   Length              0005 (5)\n+51AD40   Flags               01 (1) 'Modification'\n+51AD41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AD45 CENTRAL HEADER #243   02014B50 (33639248)\n+51AD49 Created Zip Spec      14 (20) '2.0'\n+51AD4A Created OS            00 (0) 'MS-DOS'\n+51AD4B Extract Zip Spec      14 (20) '2.0'\n+51AD4C Extract OS            00 (0) 'MS-DOS'\n+51AD4D General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51AD4F Compression Method    0000 (0) 'Stored'\n+51AD51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AD55 CRC                   5C6B1924 (1550522660)\n+51AD59 Compressed Size       00000DDD (3549)\n+51AD5D Uncompressed Size     00000DDD (3549)\n+51AD61 Filename Length       008E (142)\n+51AD63 Extra Length          0009 (9)\n+51AD65 Comment Length        0000 (0)\n+51AD67 Disk Start            0000 (0)\n+51AD69 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AD6B Ext File Attributes   00000000 (0)\n+51AD6F Local Header Offset   0009028A (590474)\n+51AD73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x51ADF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51AD73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51AE82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AE84   Length              0005 (5)\n-51AE86   Flags               01 (1) 'Modification'\n-51AE87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AE8B CENTRAL HEADER #244   02014B50 (33639248)\n-51AE8F Created Zip Spec      14 (20) '2.0'\n-51AE90 Created OS            00 (0) 'MS-DOS'\n-51AE91 Extract Zip Spec      14 (20) '2.0'\n-51AE92 Extract OS            00 (0) 'MS-DOS'\n-51AE93 General Purpose Flag  0000 (0)\n-51AE95 Compression Method    0000 (0) 'Stored'\n-51AE97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AE9B CRC                   00000000 (0)\n-51AE9F Compressed Size       00000000 (0)\n-51AEA3 Uncompressed Size     00000000 (0)\n-51AEA7 Filename Length       0063 (99)\n-51AEA9 Extra Length          0009 (9)\n-51AEAB Comment Length        0000 (0)\n-51AEAD Disk Start            0000 (0)\n-51AEAF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AEB1 Ext File Attributes   00000000 (0)\n-51AEB5 Local Header Offset   00091195 (594325)\n-51AEB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AEB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AF1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AF1E   Length              0005 (5)\n-51AF20   Flags               01 (1) 'Modification'\n-51AF21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AF25 CENTRAL HEADER #245   02014B50 (33639248)\n-51AF29 Created Zip Spec      14 (20) '2.0'\n-51AF2A Created OS            00 (0) 'MS-DOS'\n-51AF2B Extract Zip Spec      14 (20) '2.0'\n-51AF2C Extract OS            00 (0) 'MS-DOS'\n-51AF2D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51AF2F Compression Method    0000 (0) 'Stored'\n-51AF31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AF35 CRC                   C7DF88BB (3353315515)\n-51AF39 Compressed Size       00009335 (37685)\n-51AF3D Uncompressed Size     00009335 (37685)\n-51AF41 Filename Length       0079 (121)\n-51AF43 Extra Length          0009 (9)\n-51AF45 Comment Length        0000 (0)\n-51AF47 Disk Start            0000 (0)\n-51AF49 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AF4B Ext File Attributes   00000000 (0)\n-51AF4F Local Header Offset   0009121F (594463)\n-51AF53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51AF53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51AFCC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51AFCE   Length              0005 (5)\n-51AFD0   Flags               01 (1) 'Modification'\n-51AFD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51AFD5 CENTRAL HEADER #246   02014B50 (33639248)\n-51AFD9 Created Zip Spec      14 (20) '2.0'\n-51AFDA Created OS            00 (0) 'MS-DOS'\n-51AFDB Extract Zip Spec      14 (20) '2.0'\n-51AFDC Extract OS            00 (0) 'MS-DOS'\n-51AFDD General Purpose Flag  0000 (0)\n-51AFDF Compression Method    0000 (0) 'Stored'\n-51AFE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51AFE5 CRC                   00000000 (0)\n-51AFE9 Compressed Size       00000000 (0)\n-51AFED Uncompressed Size     00000000 (0)\n-51AFF1 Filename Length       006C (108)\n-51AFF3 Extra Length          0009 (9)\n-51AFF5 Comment Length        0000 (0)\n-51AFF7 Disk Start            0000 (0)\n-51AFF9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51AFFB Ext File Attributes   00000000 (0)\n-51AFFF Local Header Offset   0009A604 (632324)\n-51B003 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B003: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B06F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B071   Length              0005 (5)\n-51B073   Flags               01 (1) 'Modification'\n-51B074   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B078 CENTRAL HEADER #247   02014B50 (33639248)\n-51B07C Created Zip Spec      14 (20) '2.0'\n-51B07D Created OS            00 (0) 'MS-DOS'\n-51B07E Extract Zip Spec      14 (20) '2.0'\n-51B07F Extract OS            00 (0) 'MS-DOS'\n-51B080 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B082 Compression Method    0000 (0) 'Stored'\n-51B084 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B088 CRC                   217BBE0B (561757707)\n-51B08C Compressed Size       00001BB1 (7089)\n-51B090 Uncompressed Size     00001BB1 (7089)\n-51B094 Filename Length       0082 (130)\n-51B096 Extra Length          0009 (9)\n-51B098 Comment Length        0000 (0)\n-51B09A Disk Start            0000 (0)\n-51B09C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B09E Ext File Attributes   00000000 (0)\n-51B0A2 Local Header Offset   0009A697 (632471)\n-51B0A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B0A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B128 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B12A   Length              0005 (5)\n-51B12C   Flags               01 (1) 'Modification'\n-51B12D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B131 CENTRAL HEADER #248   02014B50 (33639248)\n-51B135 Created Zip Spec      14 (20) '2.0'\n-51B136 Created OS            00 (0) 'MS-DOS'\n-51B137 Extract Zip Spec      14 (20) '2.0'\n-51B138 Extract OS            00 (0) 'MS-DOS'\n-51B139 General Purpose Flag  0000 (0)\n-51B13B Compression Method    0000 (0) 'Stored'\n-51B13D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B141 CRC                   00000000 (0)\n-51B145 Compressed Size       00000000 (0)\n-51B149 Uncompressed Size     00000000 (0)\n-51B14D Filename Length       0069 (105)\n-51B14F Extra Length          0009 (9)\n-51B151 Comment Length        0000 (0)\n-51B153 Disk Start            0000 (0)\n-51B155 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B157 Ext File Attributes   00000000 (0)\n-51B15B Local Header Offset   0009C301 (639745)\n-51B15F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B15F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B1C8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B1CA   Length              0005 (5)\n-51B1CC   Flags               01 (1) 'Modification'\n-51B1CD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B1D1 CENTRAL HEADER #249   02014B50 (33639248)\n-51B1D5 Created Zip Spec      14 (20) '2.0'\n-51B1D6 Created OS            00 (0) 'MS-DOS'\n-51B1D7 Extract Zip Spec      14 (20) '2.0'\n-51B1D8 Extract OS            00 (0) 'MS-DOS'\n-51B1D9 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B1DB Compression Method    0000 (0) 'Stored'\n-51B1DD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B1E1 CRC                   CF72F6D0 (3480418000)\n-51B1E5 Compressed Size       00004A6A (19050)\n-51B1E9 Uncompressed Size     00004A6A (19050)\n-51B1ED Filename Length       007F (127)\n-51B1EF Extra Length          0009 (9)\n-51B1F1 Comment Length        0000 (0)\n-51B1F3 Disk Start            0000 (0)\n-51B1F5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B1F7 Ext File Attributes   00000000 (0)\n-51B1FB Local Header Offset   0009C391 (639889)\n-51B1FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B1FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B27E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B280   Length              0005 (5)\n-51B282   Flags               01 (1) 'Modification'\n-51B283   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B287 CENTRAL HEADER #250   02014B50 (33639248)\n-51B28B Created Zip Spec      14 (20) '2.0'\n-51B28C Created OS            00 (0) 'MS-DOS'\n-51B28D Extract Zip Spec      14 (20) '2.0'\n-51B28E Extract OS            00 (0) 'MS-DOS'\n-51B28F General Purpose Flag  0000 (0)\n-51B291 Compression Method    0000 (0) 'Stored'\n-51B293 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B297 CRC                   00000000 (0)\n-51B29B Compressed Size       00000000 (0)\n-51B29F Uncompressed Size     00000000 (0)\n-51B2A3 Filename Length       0029 (41)\n-51B2A5 Extra Length          0009 (9)\n-51B2A7 Comment Length        0000 (0)\n-51B2A9 Disk Start            0000 (0)\n-51B2AB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B2AD Ext File Attributes   00000000 (0)\n-51B2B1 Local Header Offset   000A0EB1 (659121)\n-51B2B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B2B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B2DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B2E0   Length              0005 (5)\n-51B2E2   Flags               01 (1) 'Modification'\n-51B2E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B2E7 CENTRAL HEADER #251   02014B50 (33639248)\n-51B2EB Created Zip Spec      14 (20) '2.0'\n-51B2EC Created OS            00 (0) 'MS-DOS'\n-51B2ED Extract Zip Spec      14 (20) '2.0'\n-51B2EE Extract OS            00 (0) 'MS-DOS'\n-51B2EF General Purpose Flag  0000 (0)\n-51B2F1 Compression Method    0000 (0) 'Stored'\n-51B2F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B2F7 CRC                   00000000 (0)\n-51B2FB Compressed Size       00000000 (0)\n-51B2FF Uncompressed Size     00000000 (0)\n-51B303 Filename Length       0032 (50)\n-51B305 Extra Length          0009 (9)\n-51B307 Comment Length        0000 (0)\n-51B309 Disk Start            0000 (0)\n-51B30B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B30D Ext File Attributes   00000000 (0)\n-51B311 Local Header Offset   000A0F01 (659201)\n-51B315 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B315: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B347 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B349   Length              0005 (5)\n-51B34B   Flags               01 (1) 'Modification'\n-51B34C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B350 CENTRAL HEADER #252   02014B50 (33639248)\n-51B354 Created Zip Spec      14 (20) '2.0'\n-51B355 Created OS            00 (0) 'MS-DOS'\n-51B356 Extract Zip Spec      14 (20) '2.0'\n-51B357 Extract OS            00 (0) 'MS-DOS'\n-51B358 General Purpose Flag  0000 (0)\n-51B35A Compression Method    0000 (0) 'Stored'\n-51B35C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B360 CRC                   00000000 (0)\n-51B364 Compressed Size       00000000 (0)\n-51B368 Uncompressed Size     00000000 (0)\n-51B36C Filename Length       006C (108)\n-51B36E Extra Length          0009 (9)\n-51B370 Comment Length        0000 (0)\n-51B372 Disk Start            0000 (0)\n-51B374 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B376 Ext File Attributes   00000000 (0)\n-51B37A Local Header Offset   000A0F5A (659290)\n-51B37E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B37E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B3EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B3EC   Length              0005 (5)\n-51B3EE   Flags               01 (1) 'Modification'\n-51B3EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B3F3 CENTRAL HEADER #253   02014B50 (33639248)\n-51B3F7 Created Zip Spec      14 (20) '2.0'\n-51B3F8 Created OS            00 (0) 'MS-DOS'\n-51B3F9 Extract Zip Spec      14 (20) '2.0'\n-51B3FA Extract OS            00 (0) 'MS-DOS'\n-51B3FB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B3FD Compression Method    0000 (0) 'Stored'\n-51B3FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B403 CRC                   DCEFA272 (3706692210)\n-51B407 Compressed Size       000009D3 (2515)\n-51B40B Uncompressed Size     000009D3 (2515)\n-51B40F Filename Length       0082 (130)\n-51B411 Extra Length          0009 (9)\n-51B413 Comment Length        0000 (0)\n-51B415 Disk Start            0000 (0)\n-51B417 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B419 Ext File Attributes   00000000 (0)\n-51B41D Local Header Offset   000A0FED (659437)\n-51B421 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B421: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B4A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B4A5   Length              0005 (5)\n-51B4A7   Flags               01 (1) 'Modification'\n-51B4A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B4AC CENTRAL HEADER #254   02014B50 (33639248)\n-51B4B0 Created Zip Spec      14 (20) '2.0'\n-51B4B1 Created OS            00 (0) 'MS-DOS'\n-51B4B2 Extract Zip Spec      14 (20) '2.0'\n-51B4B3 Extract OS            00 (0) 'MS-DOS'\n-51B4B4 General Purpose Flag  0000 (0)\n-51B4B6 Compression Method    0000 (0) 'Stored'\n-51B4B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B4BC CRC                   00000000 (0)\n-51B4C0 Compressed Size       00000000 (0)\n-51B4C4 Uncompressed Size     00000000 (0)\n-51B4C8 Filename Length       006E (110)\n-51B4CA Extra Length          0009 (9)\n-51B4CC Comment Length        0000 (0)\n-51B4CE Disk Start            0000 (0)\n-51B4D0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B4D2 Ext File Attributes   00000000 (0)\n-51B4D6 Local Header Offset   000A1A79 (662137)\n-51B4DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B4DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B548 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B54A   Length              0005 (5)\n-51B54C   Flags               01 (1) 'Modification'\n-51B54D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B551 CENTRAL HEADER #255   02014B50 (33639248)\n-51B555 Created Zip Spec      14 (20) '2.0'\n-51B556 Created OS            00 (0) 'MS-DOS'\n-51B557 Extract Zip Spec      14 (20) '2.0'\n-51B558 Extract OS            00 (0) 'MS-DOS'\n-51B559 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B55B Compression Method    0000 (0) 'Stored'\n-51B55D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B561 CRC                   26E963FE (652829694)\n-51B565 Compressed Size       00001276 (4726)\n-51B569 Uncompressed Size     00001276 (4726)\n-51B56D Filename Length       0084 (132)\n-51B56F Extra Length          0009 (9)\n-51B571 Comment Length        0000 (0)\n-51B573 Disk Start            0000 (0)\n-51B575 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B577 Ext File Attributes   00000000 (0)\n-51B57B Local Header Offset   000A1B0E (662286)\n-51B57F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51AE01 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AE03   Length              0005 (5)\n+51AE05   Flags               01 (1) 'Modification'\n+51AE06   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AE0A CENTRAL HEADER #244   02014B50 (33639248)\n+51AE0E Created Zip Spec      14 (20) '2.0'\n+51AE0F Created OS            00 (0) 'MS-DOS'\n+51AE10 Extract Zip Spec      14 (20) '2.0'\n+51AE11 Extract OS            00 (0) 'MS-DOS'\n+51AE12 General Purpose Flag  0000 (0)\n+51AE14 Compression Method    0000 (0) 'Stored'\n+51AE16 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AE1A CRC                   00000000 (0)\n+51AE1E Compressed Size       00000000 (0)\n+51AE22 Uncompressed Size     00000000 (0)\n+51AE26 Filename Length       0063 (99)\n+51AE28 Extra Length          0009 (9)\n+51AE2A Comment Length        0000 (0)\n+51AE2C Disk Start            0000 (0)\n+51AE2E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AE30 Ext File Attributes   00000000 (0)\n+51AE34 Local Header Offset   0009112C (594220)\n+51AE38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AE38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AE9B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AE9D   Length              0005 (5)\n+51AE9F   Flags               01 (1) 'Modification'\n+51AEA0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AEA4 CENTRAL HEADER #245   02014B50 (33639248)\n+51AEA8 Created Zip Spec      14 (20) '2.0'\n+51AEA9 Created OS            00 (0) 'MS-DOS'\n+51AEAA Extract Zip Spec      14 (20) '2.0'\n+51AEAB Extract OS            00 (0) 'MS-DOS'\n+51AEAC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51AEAE Compression Method    0000 (0) 'Stored'\n+51AEB0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AEB4 CRC                   C7DF88BB (3353315515)\n+51AEB8 Compressed Size       00009335 (37685)\n+51AEBC Uncompressed Size     00009335 (37685)\n+51AEC0 Filename Length       0079 (121)\n+51AEC2 Extra Length          0009 (9)\n+51AEC4 Comment Length        0000 (0)\n+51AEC6 Disk Start            0000 (0)\n+51AEC8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AECA Ext File Attributes   00000000 (0)\n+51AECE Local Header Offset   000911B6 (594358)\n+51AED2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AED2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AF4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AF4D   Length              0005 (5)\n+51AF4F   Flags               01 (1) 'Modification'\n+51AF50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AF54 CENTRAL HEADER #246   02014B50 (33639248)\n+51AF58 Created Zip Spec      14 (20) '2.0'\n+51AF59 Created OS            00 (0) 'MS-DOS'\n+51AF5A Extract Zip Spec      14 (20) '2.0'\n+51AF5B Extract OS            00 (0) 'MS-DOS'\n+51AF5C General Purpose Flag  0000 (0)\n+51AF5E Compression Method    0000 (0) 'Stored'\n+51AF60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51AF64 CRC                   00000000 (0)\n+51AF68 Compressed Size       00000000 (0)\n+51AF6C Uncompressed Size     00000000 (0)\n+51AF70 Filename Length       006C (108)\n+51AF72 Extra Length          0009 (9)\n+51AF74 Comment Length        0000 (0)\n+51AF76 Disk Start            0000 (0)\n+51AF78 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51AF7A Ext File Attributes   00000000 (0)\n+51AF7E Local Header Offset   0009A59B (632219)\n+51AF82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51AF82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51AFEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51AFF0   Length              0005 (5)\n+51AFF2   Flags               01 (1) 'Modification'\n+51AFF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51AFF7 CENTRAL HEADER #247   02014B50 (33639248)\n+51AFFB Created Zip Spec      14 (20) '2.0'\n+51AFFC Created OS            00 (0) 'MS-DOS'\n+51AFFD Extract Zip Spec      14 (20) '2.0'\n+51AFFE Extract OS            00 (0) 'MS-DOS'\n+51AFFF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B001 Compression Method    0000 (0) 'Stored'\n+51B003 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B007 CRC                   217BBE0B (561757707)\n+51B00B Compressed Size       00001BB1 (7089)\n+51B00F Uncompressed Size     00001BB1 (7089)\n+51B013 Filename Length       0082 (130)\n+51B015 Extra Length          0009 (9)\n+51B017 Comment Length        0000 (0)\n+51B019 Disk Start            0000 (0)\n+51B01B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B01D Ext File Attributes   00000000 (0)\n+51B021 Local Header Offset   0009A62E (632366)\n+51B025 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B025: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B0A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B0A9   Length              0005 (5)\n+51B0AB   Flags               01 (1) 'Modification'\n+51B0AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B0B0 CENTRAL HEADER #248   02014B50 (33639248)\n+51B0B4 Created Zip Spec      14 (20) '2.0'\n+51B0B5 Created OS            00 (0) 'MS-DOS'\n+51B0B6 Extract Zip Spec      14 (20) '2.0'\n+51B0B7 Extract OS            00 (0) 'MS-DOS'\n+51B0B8 General Purpose Flag  0000 (0)\n+51B0BA Compression Method    0000 (0) 'Stored'\n+51B0BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B0C0 CRC                   00000000 (0)\n+51B0C4 Compressed Size       00000000 (0)\n+51B0C8 Uncompressed Size     00000000 (0)\n+51B0CC Filename Length       0069 (105)\n+51B0CE Extra Length          0009 (9)\n+51B0D0 Comment Length        0000 (0)\n+51B0D2 Disk Start            0000 (0)\n+51B0D4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B0D6 Ext File Attributes   00000000 (0)\n+51B0DA Local Header Offset   0009C298 (639640)\n+51B0DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B0DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B147 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B149   Length              0005 (5)\n+51B14B   Flags               01 (1) 'Modification'\n+51B14C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B150 CENTRAL HEADER #249   02014B50 (33639248)\n+51B154 Created Zip Spec      14 (20) '2.0'\n+51B155 Created OS            00 (0) 'MS-DOS'\n+51B156 Extract Zip Spec      14 (20) '2.0'\n+51B157 Extract OS            00 (0) 'MS-DOS'\n+51B158 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B15A Compression Method    0000 (0) 'Stored'\n+51B15C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B160 CRC                   CF72F6D0 (3480418000)\n+51B164 Compressed Size       00004A6A (19050)\n+51B168 Uncompressed Size     00004A6A (19050)\n+51B16C Filename Length       007F (127)\n+51B16E Extra Length          0009 (9)\n+51B170 Comment Length        0000 (0)\n+51B172 Disk Start            0000 (0)\n+51B174 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B176 Ext File Attributes   00000000 (0)\n+51B17A Local Header Offset   0009C328 (639784)\n+51B17E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B17E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B1FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B1FF   Length              0005 (5)\n+51B201   Flags               01 (1) 'Modification'\n+51B202   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B206 CENTRAL HEADER #250   02014B50 (33639248)\n+51B20A Created Zip Spec      14 (20) '2.0'\n+51B20B Created OS            00 (0) 'MS-DOS'\n+51B20C Extract Zip Spec      14 (20) '2.0'\n+51B20D Extract OS            00 (0) 'MS-DOS'\n+51B20E General Purpose Flag  0000 (0)\n+51B210 Compression Method    0000 (0) 'Stored'\n+51B212 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B216 CRC                   00000000 (0)\n+51B21A Compressed Size       00000000 (0)\n+51B21E Uncompressed Size     00000000 (0)\n+51B222 Filename Length       0029 (41)\n+51B224 Extra Length          0009 (9)\n+51B226 Comment Length        0000 (0)\n+51B228 Disk Start            0000 (0)\n+51B22A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B22C Ext File Attributes   00000000 (0)\n+51B230 Local Header Offset   000A0E48 (659016)\n+51B234 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B234: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B25D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B25F   Length              0005 (5)\n+51B261   Flags               01 (1) 'Modification'\n+51B262   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B266 CENTRAL HEADER #251   02014B50 (33639248)\n+51B26A Created Zip Spec      14 (20) '2.0'\n+51B26B Created OS            00 (0) 'MS-DOS'\n+51B26C Extract Zip Spec      14 (20) '2.0'\n+51B26D Extract OS            00 (0) 'MS-DOS'\n+51B26E General Purpose Flag  0000 (0)\n+51B270 Compression Method    0000 (0) 'Stored'\n+51B272 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B276 CRC                   00000000 (0)\n+51B27A Compressed Size       00000000 (0)\n+51B27E Uncompressed Size     00000000 (0)\n+51B282 Filename Length       0032 (50)\n+51B284 Extra Length          0009 (9)\n+51B286 Comment Length        0000 (0)\n+51B288 Disk Start            0000 (0)\n+51B28A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B28C Ext File Attributes   00000000 (0)\n+51B290 Local Header Offset   000A0E98 (659096)\n+51B294 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B294: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B2C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B2C8   Length              0005 (5)\n+51B2CA   Flags               01 (1) 'Modification'\n+51B2CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B2CF CENTRAL HEADER #252   02014B50 (33639248)\n+51B2D3 Created Zip Spec      14 (20) '2.0'\n+51B2D4 Created OS            00 (0) 'MS-DOS'\n+51B2D5 Extract Zip Spec      14 (20) '2.0'\n+51B2D6 Extract OS            00 (0) 'MS-DOS'\n+51B2D7 General Purpose Flag  0000 (0)\n+51B2D9 Compression Method    0000 (0) 'Stored'\n+51B2DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B2DF CRC                   00000000 (0)\n+51B2E3 Compressed Size       00000000 (0)\n+51B2E7 Uncompressed Size     00000000 (0)\n+51B2EB Filename Length       006C (108)\n+51B2ED Extra Length          0009 (9)\n+51B2EF Comment Length        0000 (0)\n+51B2F1 Disk Start            0000 (0)\n+51B2F3 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B2F5 Ext File Attributes   00000000 (0)\n+51B2F9 Local Header Offset   000A0EF1 (659185)\n+51B2FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B2FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B369 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B36B   Length              0005 (5)\n+51B36D   Flags               01 (1) 'Modification'\n+51B36E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B372 CENTRAL HEADER #253   02014B50 (33639248)\n+51B376 Created Zip Spec      14 (20) '2.0'\n+51B377 Created OS            00 (0) 'MS-DOS'\n+51B378 Extract Zip Spec      14 (20) '2.0'\n+51B379 Extract OS            00 (0) 'MS-DOS'\n+51B37A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B37C Compression Method    0000 (0) 'Stored'\n+51B37E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B382 CRC                   DCEFA272 (3706692210)\n+51B386 Compressed Size       000009D3 (2515)\n+51B38A Uncompressed Size     000009D3 (2515)\n+51B38E Filename Length       0082 (130)\n+51B390 Extra Length          0009 (9)\n+51B392 Comment Length        0000 (0)\n+51B394 Disk Start            0000 (0)\n+51B396 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B398 Ext File Attributes   00000000 (0)\n+51B39C Local Header Offset   000A0F84 (659332)\n+51B3A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B3A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B422 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B424   Length              0005 (5)\n+51B426   Flags               01 (1) 'Modification'\n+51B427   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B42B CENTRAL HEADER #254   02014B50 (33639248)\n+51B42F Created Zip Spec      14 (20) '2.0'\n+51B430 Created OS            00 (0) 'MS-DOS'\n+51B431 Extract Zip Spec      14 (20) '2.0'\n+51B432 Extract OS            00 (0) 'MS-DOS'\n+51B433 General Purpose Flag  0000 (0)\n+51B435 Compression Method    0000 (0) 'Stored'\n+51B437 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B43B CRC                   00000000 (0)\n+51B43F Compressed Size       00000000 (0)\n+51B443 Uncompressed Size     00000000 (0)\n+51B447 Filename Length       006E (110)\n+51B449 Extra Length          0009 (9)\n+51B44B Comment Length        0000 (0)\n+51B44D Disk Start            0000 (0)\n+51B44F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B451 Ext File Attributes   00000000 (0)\n+51B455 Local Header Offset   000A1A10 (662032)\n+51B459 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B459: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B4C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B4C9   Length              0005 (5)\n+51B4CB   Flags               01 (1) 'Modification'\n+51B4CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B4D0 CENTRAL HEADER #255   02014B50 (33639248)\n+51B4D4 Created Zip Spec      14 (20) '2.0'\n+51B4D5 Created OS            00 (0) 'MS-DOS'\n+51B4D6 Extract Zip Spec      14 (20) '2.0'\n+51B4D7 Extract OS            00 (0) 'MS-DOS'\n+51B4D8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B4DA Compression Method    0000 (0) 'Stored'\n+51B4DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B4E0 CRC                   26E963FE (652829694)\n+51B4E4 Compressed Size       00001276 (4726)\n+51B4E8 Uncompressed Size     00001276 (4726)\n+51B4EC Filename Length       0084 (132)\n+51B4EE Extra Length          0009 (9)\n+51B4F0 Comment Length        0000 (0)\n+51B4F2 Disk Start            0000 (0)\n+51B4F4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B4F6 Ext File Attributes   00000000 (0)\n+51B4FA Local Header Offset   000A1AA5 (662181)\n+51B4FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x51B57F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51B4FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51B603 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B605   Length              0005 (5)\n-51B607   Flags               01 (1) 'Modification'\n-51B608   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B60C CENTRAL HEADER #256   02014B50 (33639248)\n-51B610 Created Zip Spec      14 (20) '2.0'\n-51B611 Created OS            00 (0) 'MS-DOS'\n-51B612 Extract Zip Spec      14 (20) '2.0'\n-51B613 Extract OS            00 (0) 'MS-DOS'\n-51B614 General Purpose Flag  0000 (0)\n-51B616 Compression Method    0000 (0) 'Stored'\n-51B618 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B61C CRC                   00000000 (0)\n-51B620 Compressed Size       00000000 (0)\n-51B624 Uncompressed Size     00000000 (0)\n-51B628 Filename Length       0028 (40)\n-51B62A Extra Length          0009 (9)\n-51B62C Comment Length        0000 (0)\n-51B62E Disk Start            0000 (0)\n-51B630 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B632 Ext File Attributes   00000000 (0)\n-51B636 Local Header Offset   000A2E3F (667199)\n-51B63A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B63A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B662 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B664   Length              0005 (5)\n-51B666   Flags               01 (1) 'Modification'\n-51B667   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B66B CENTRAL HEADER #257   02014B50 (33639248)\n-51B66F Created Zip Spec      14 (20) '2.0'\n-51B670 Created OS            00 (0) 'MS-DOS'\n-51B671 Extract Zip Spec      14 (20) '2.0'\n-51B672 Extract OS            00 (0) 'MS-DOS'\n-51B673 General Purpose Flag  0000 (0)\n-51B675 Compression Method    0000 (0) 'Stored'\n-51B677 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B67B CRC                   00000000 (0)\n-51B67F Compressed Size       00000000 (0)\n-51B683 Uncompressed Size     00000000 (0)\n-51B687 Filename Length       0031 (49)\n-51B689 Extra Length          0009 (9)\n-51B68B Comment Length        0000 (0)\n-51B68D Disk Start            0000 (0)\n-51B68F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B691 Ext File Attributes   00000000 (0)\n-51B695 Local Header Offset   000A2E8E (667278)\n-51B699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B6CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B6CC   Length              0005 (5)\n-51B6CE   Flags               01 (1) 'Modification'\n-51B6CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B6D3 CENTRAL HEADER #258   02014B50 (33639248)\n-51B6D7 Created Zip Spec      14 (20) '2.0'\n-51B6D8 Created OS            00 (0) 'MS-DOS'\n-51B6D9 Extract Zip Spec      14 (20) '2.0'\n-51B6DA Extract OS            00 (0) 'MS-DOS'\n-51B6DB General Purpose Flag  0000 (0)\n-51B6DD Compression Method    0000 (0) 'Stored'\n-51B6DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B6E3 CRC                   00000000 (0)\n-51B6E7 Compressed Size       00000000 (0)\n-51B6EB Uncompressed Size     00000000 (0)\n-51B6EF Filename Length       0061 (97)\n-51B6F1 Extra Length          0009 (9)\n-51B6F3 Comment Length        0000 (0)\n-51B6F5 Disk Start            0000 (0)\n-51B6F7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B6F9 Ext File Attributes   00000000 (0)\n-51B6FD Local Header Offset   000A2EE6 (667366)\n-51B701 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B701: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B762 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B764   Length              0005 (5)\n-51B766   Flags               01 (1) 'Modification'\n-51B767   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B76B CENTRAL HEADER #259   02014B50 (33639248)\n-51B76F Created Zip Spec      14 (20) '2.0'\n-51B770 Created OS            00 (0) 'MS-DOS'\n-51B771 Extract Zip Spec      14 (20) '2.0'\n-51B772 Extract OS            00 (0) 'MS-DOS'\n-51B773 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B775 Compression Method    0000 (0) 'Stored'\n-51B777 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B77B CRC                   9B32EF54 (2603806548)\n-51B77F Compressed Size       000054C4 (21700)\n-51B783 Uncompressed Size     000054C4 (21700)\n-51B787 Filename Length       0077 (119)\n-51B789 Extra Length          0009 (9)\n-51B78B Comment Length        0000 (0)\n-51B78D Disk Start            0000 (0)\n-51B78F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B791 Ext File Attributes   00000000 (0)\n-51B795 Local Header Offset   000A2F6E (667502)\n-51B799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B810 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B812   Length              0005 (5)\n-51B814   Flags               01 (1) 'Modification'\n-51B815   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B819 CENTRAL HEADER #260   02014B50 (33639248)\n-51B81D Created Zip Spec      14 (20) '2.0'\n-51B81E Created OS            00 (0) 'MS-DOS'\n-51B81F Extract Zip Spec      14 (20) '2.0'\n-51B820 Extract OS            00 (0) 'MS-DOS'\n-51B821 General Purpose Flag  0000 (0)\n-51B823 Compression Method    0000 (0) 'Stored'\n-51B825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B829 CRC                   00000000 (0)\n-51B82D Compressed Size       00000000 (0)\n-51B831 Uncompressed Size     00000000 (0)\n-51B835 Filename Length       0068 (104)\n-51B837 Extra Length          0009 (9)\n-51B839 Comment Length        0000 (0)\n-51B83B Disk Start            0000 (0)\n-51B83D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B83F Ext File Attributes   00000000 (0)\n-51B843 Local Header Offset   000A84E0 (689376)\n-51B847 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B847: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B8AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B8B1   Length              0005 (5)\n-51B8B3   Flags               01 (1) 'Modification'\n-51B8B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B8B8 CENTRAL HEADER #261   02014B50 (33639248)\n-51B8BC Created Zip Spec      14 (20) '2.0'\n-51B8BD Created OS            00 (0) 'MS-DOS'\n-51B8BE Extract Zip Spec      14 (20) '2.0'\n-51B8BF Extract OS            00 (0) 'MS-DOS'\n-51B8C0 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51B8C2 Compression Method    0000 (0) 'Stored'\n-51B8C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B8C8 CRC                   4975042F (1232405551)\n-51B8CC Compressed Size       00001B21 (6945)\n-51B8D0 Uncompressed Size     00001B21 (6945)\n-51B8D4 Filename Length       007E (126)\n-51B8D6 Extra Length          0009 (9)\n-51B8D8 Comment Length        0000 (0)\n-51B8DA Disk Start            0000 (0)\n-51B8DC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B8DE Ext File Attributes   00000000 (0)\n-51B8E2 Local Header Offset   000A856F (689519)\n-51B8E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B8E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51B964 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51B966   Length              0005 (5)\n-51B968   Flags               01 (1) 'Modification'\n-51B969   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51B96D CENTRAL HEADER #262   02014B50 (33639248)\n-51B971 Created Zip Spec      14 (20) '2.0'\n-51B972 Created OS            00 (0) 'MS-DOS'\n-51B973 Extract Zip Spec      14 (20) '2.0'\n-51B974 Extract OS            00 (0) 'MS-DOS'\n-51B975 General Purpose Flag  0000 (0)\n-51B977 Compression Method    0000 (0) 'Stored'\n-51B979 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51B97D CRC                   00000000 (0)\n-51B981 Compressed Size       00000000 (0)\n-51B985 Uncompressed Size     00000000 (0)\n-51B989 Filename Length       006B (107)\n-51B98B Extra Length          0009 (9)\n-51B98D Comment Length        0000 (0)\n-51B98F Disk Start            0000 (0)\n-51B991 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51B993 Ext File Attributes   00000000 (0)\n-51B997 Local Header Offset   000AA145 (696645)\n-51B99B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51B99B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BA06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BA08   Length              0005 (5)\n-51BA0A   Flags               01 (1) 'Modification'\n-51BA0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BA0F CENTRAL HEADER #263   02014B50 (33639248)\n-51BA13 Created Zip Spec      14 (20) '2.0'\n-51BA14 Created OS            00 (0) 'MS-DOS'\n-51BA15 Extract Zip Spec      14 (20) '2.0'\n-51BA16 Extract OS            00 (0) 'MS-DOS'\n-51BA17 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51BA19 Compression Method    0000 (0) 'Stored'\n-51BA1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BA1F CRC                   27E12F4C (669069132)\n-51BA23 Compressed Size       000014EA (5354)\n-51BA27 Uncompressed Size     000014EA (5354)\n-51BA2B Filename Length       0081 (129)\n-51BA2D Extra Length          0009 (9)\n-51BA2F Comment Length        0000 (0)\n-51BA31 Disk Start            0000 (0)\n-51BA33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BA35 Ext File Attributes   00000000 (0)\n-51BA39 Local Header Offset   000AA1D7 (696791)\n-51BA3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BA3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BABE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BAC0   Length              0005 (5)\n-51BAC2   Flags               01 (1) 'Modification'\n-51BAC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BAC7 CENTRAL HEADER #264   02014B50 (33639248)\n-51BACB Created Zip Spec      14 (20) '2.0'\n-51BACC Created OS            00 (0) 'MS-DOS'\n-51BACD Extract Zip Spec      14 (20) '2.0'\n-51BACE Extract OS            00 (0) 'MS-DOS'\n-51BACF General Purpose Flag  0000 (0)\n-51BAD1 Compression Method    0000 (0) 'Stored'\n-51BAD3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BAD7 CRC                   00000000 (0)\n-51BADB Compressed Size       00000000 (0)\n-51BADF Uncompressed Size     00000000 (0)\n-51BAE3 Filename Length       006B (107)\n-51BAE5 Extra Length          0009 (9)\n-51BAE7 Comment Length        0000 (0)\n-51BAE9 Disk Start            0000 (0)\n-51BAEB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BAED Ext File Attributes   00000000 (0)\n-51BAF1 Local Header Offset   000AB779 (702329)\n-51BAF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BAF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BB60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BB62   Length              0005 (5)\n-51BB64   Flags               01 (1) 'Modification'\n-51BB65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BB69 CENTRAL HEADER #265   02014B50 (33639248)\n-51BB6D Created Zip Spec      14 (20) '2.0'\n-51BB6E Created OS            00 (0) 'MS-DOS'\n-51BB6F Extract Zip Spec      14 (20) '2.0'\n-51BB70 Extract OS            00 (0) 'MS-DOS'\n-51BB71 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51BB73 Compression Method    0000 (0) 'Stored'\n-51BB75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BB79 CRC                   3E8950DE (1049186526)\n-51BB7D Compressed Size       000036E0 (14048)\n-51BB81 Uncompressed Size     000036E0 (14048)\n-51BB85 Filename Length       0081 (129)\n-51BB87 Extra Length          0009 (9)\n-51BB89 Comment Length        0000 (0)\n-51BB8B Disk Start            0000 (0)\n-51BB8D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BB8F Ext File Attributes   00000000 (0)\n-51BB93 Local Header Offset   000AB80B (702475)\n-51BB97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BB97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BC18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BC1A   Length              0005 (5)\n-51BC1C   Flags               01 (1) 'Modification'\n-51BC1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BC21 CENTRAL HEADER #266   02014B50 (33639248)\n-51BC25 Created Zip Spec      14 (20) '2.0'\n-51BC26 Created OS            00 (0) 'MS-DOS'\n-51BC27 Extract Zip Spec      14 (20) '2.0'\n-51BC28 Extract OS            00 (0) 'MS-DOS'\n-51BC29 General Purpose Flag  0000 (0)\n-51BC2B Compression Method    0000 (0) 'Stored'\n-51BC2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BC31 CRC                   00000000 (0)\n-51BC35 Compressed Size       00000000 (0)\n-51BC39 Uncompressed Size     00000000 (0)\n-51BC3D Filename Length       006A (106)\n-51BC3F Extra Length          0009 (9)\n-51BC41 Comment Length        0000 (0)\n-51BC43 Disk Start            0000 (0)\n-51BC45 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BC47 Ext File Attributes   00000000 (0)\n-51BC4B Local Header Offset   000AEFA3 (716707)\n-51BC4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BC4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BCB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BCBB   Length              0005 (5)\n-51BCBD   Flags               01 (1) 'Modification'\n-51BCBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BCC2 CENTRAL HEADER #267   02014B50 (33639248)\n-51BCC6 Created Zip Spec      14 (20) '2.0'\n-51BCC7 Created OS            00 (0) 'MS-DOS'\n-51BCC8 Extract Zip Spec      14 (20) '2.0'\n-51BCC9 Extract OS            00 (0) 'MS-DOS'\n-51BCCA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51BCCC Compression Method    0000 (0) 'Stored'\n-51BCCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BCD2 CRC                   A9B3A4D7 (2847122647)\n-51BCD6 Compressed Size       00002051 (8273)\n-51BCDA Uncompressed Size     00002051 (8273)\n-51BCDE Filename Length       0080 (128)\n-51BCE0 Extra Length          0009 (9)\n-51BCE2 Comment Length        0000 (0)\n-51BCE4 Disk Start            0000 (0)\n-51BCE6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BCE8 Ext File Attributes   00000000 (0)\n-51BCEC Local Header Offset   000AF034 (716852)\n-51BCF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BCF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BD70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BD72   Length              0005 (5)\n-51BD74   Flags               01 (1) 'Modification'\n-51BD75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BD79 CENTRAL HEADER #268   02014B50 (33639248)\n-51BD7D Created Zip Spec      14 (20) '2.0'\n-51BD7E Created OS            00 (0) 'MS-DOS'\n-51BD7F Extract Zip Spec      14 (20) '2.0'\n-51BD80 Extract OS            00 (0) 'MS-DOS'\n-51BD81 General Purpose Flag  0000 (0)\n-51BD83 Compression Method    0000 (0) 'Stored'\n-51BD85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BD89 CRC                   00000000 (0)\n-51BD8D Compressed Size       00000000 (0)\n-51BD91 Uncompressed Size     00000000 (0)\n-51BD95 Filename Length       0026 (38)\n-51BD97 Extra Length          0009 (9)\n-51BD99 Comment Length        0000 (0)\n-51BD9B Disk Start            0000 (0)\n-51BD9D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BD9F Ext File Attributes   00000000 (0)\n-51BDA3 Local Header Offset   000B113C (725308)\n-51BDA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BDA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BDCD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BDCF   Length              0005 (5)\n-51BDD1   Flags               01 (1) 'Modification'\n-51BDD2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BDD6 CENTRAL HEADER #269   02014B50 (33639248)\n-51BDDA Created Zip Spec      14 (20) '2.0'\n-51BDDB Created OS            00 (0) 'MS-DOS'\n-51BDDC Extract Zip Spec      14 (20) '2.0'\n-51BDDD Extract OS            00 (0) 'MS-DOS'\n-51BDDE General Purpose Flag  0000 (0)\n-51BDE0 Compression Method    0000 (0) 'Stored'\n-51BDE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BDE6 CRC                   00000000 (0)\n-51BDEA Compressed Size       00000000 (0)\n-51BDEE Uncompressed Size     00000000 (0)\n-51BDF2 Filename Length       002F (47)\n-51BDF4 Extra Length          0009 (9)\n-51BDF6 Comment Length        0000 (0)\n-51BDF8 Disk Start            0000 (0)\n-51BDFA Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BDFC Ext File Attributes   00000000 (0)\n-51BE00 Local Header Offset   000B1189 (725385)\n-51BE04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BE04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BE33 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BE35   Length              0005 (5)\n-51BE37   Flags               01 (1) 'Modification'\n-51BE38   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BE3C CENTRAL HEADER #270   02014B50 (33639248)\n-51BE40 Created Zip Spec      14 (20) '2.0'\n-51BE41 Created OS            00 (0) 'MS-DOS'\n-51BE42 Extract Zip Spec      14 (20) '2.0'\n-51BE43 Extract OS            00 (0) 'MS-DOS'\n-51BE44 General Purpose Flag  0000 (0)\n-51BE46 Compression Method    0000 (0) 'Stored'\n-51BE48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BE4C CRC                   00000000 (0)\n-51BE50 Compressed Size       00000000 (0)\n-51BE54 Uncompressed Size     00000000 (0)\n-51BE58 Filename Length       005D (93)\n-51BE5A Extra Length          0009 (9)\n-51BE5C Comment Length        0000 (0)\n-51BE5E Disk Start            0000 (0)\n-51BE60 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BE62 Ext File Attributes   00000000 (0)\n-51BE66 Local Header Offset   000B11DF (725471)\n-51BE6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BE6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BEC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BEC9   Length              0005 (5)\n-51BECB   Flags               01 (1) 'Modification'\n-51BECC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BED0 CENTRAL HEADER #271   02014B50 (33639248)\n-51BED4 Created Zip Spec      14 (20) '2.0'\n-51BED5 Created OS            00 (0) 'MS-DOS'\n-51BED6 Extract Zip Spec      14 (20) '2.0'\n-51BED7 Extract OS            00 (0) 'MS-DOS'\n-51BED8 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51BEDA Compression Method    0000 (0) 'Stored'\n-51BEDC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BEE0 CRC                   B12610E6 (2972061926)\n-51BEE4 Compressed Size       00000A5B (2651)\n-51BEE8 Uncompressed Size     00000A5B (2651)\n-51BEEC Filename Length       0073 (115)\n-51BEEE Extra Length          0009 (9)\n-51BEF0 Comment Length        0000 (0)\n-51BEF2 Disk Start            0000 (0)\n-51BEF4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BEF6 Ext File Attributes   00000000 (0)\n-51BEFA Local Header Offset   000B1263 (725603)\n-51BEFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BEFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BF71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BF73   Length              0005 (5)\n-51BF75   Flags               01 (1) 'Modification'\n-51BF76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BF7A CENTRAL HEADER #272   02014B50 (33639248)\n-51BF7E Created Zip Spec      14 (20) '2.0'\n-51BF7F Created OS            00 (0) 'MS-DOS'\n-51BF80 Extract Zip Spec      14 (20) '2.0'\n-51BF81 Extract OS            00 (0) 'MS-DOS'\n-51BF82 General Purpose Flag  0000 (0)\n-51BF84 Compression Method    0000 (0) 'Stored'\n-51BF86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BF8A CRC                   00000000 (0)\n-51BF8E Compressed Size       00000000 (0)\n-51BF92 Uncompressed Size     00000000 (0)\n-51BF96 Filename Length       0035 (53)\n-51BF98 Extra Length          0009 (9)\n-51BF9A Comment Length        0000 (0)\n-51BF9C Disk Start            0000 (0)\n-51BF9E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51BFA0 Ext File Attributes   00000000 (0)\n-51BFA4 Local Header Offset   000B1D68 (728424)\n-51BFA8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51BFA8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51BFDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51BFDF   Length              0005 (5)\n-51BFE1   Flags               01 (1) 'Modification'\n-51BFE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51BFE6 CENTRAL HEADER #273   02014B50 (33639248)\n-51BFEA Created Zip Spec      14 (20) '2.0'\n-51BFEB Created OS            00 (0) 'MS-DOS'\n-51BFEC Extract Zip Spec      14 (20) '2.0'\n-51BFED Extract OS            00 (0) 'MS-DOS'\n-51BFEE General Purpose Flag  0000 (0)\n-51BFF0 Compression Method    0000 (0) 'Stored'\n-51BFF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51BFF6 CRC                   00000000 (0)\n-51BFFA Compressed Size       00000000 (0)\n-51BFFE Uncompressed Size     00000000 (0)\n-51C002 Filename Length       003E (62)\n-51C004 Extra Length          0009 (9)\n-51C006 Comment Length        0000 (0)\n-51C008 Disk Start            0000 (0)\n-51C00A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C00C Ext File Attributes   00000000 (0)\n-51C010 Local Header Offset   000B1DC4 (728516)\n-51C014 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C014: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C052 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C054   Length              0005 (5)\n-51C056   Flags               01 (1) 'Modification'\n-51C057   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C05B CENTRAL HEADER #274   02014B50 (33639248)\n-51C05F Created Zip Spec      14 (20) '2.0'\n-51C060 Created OS            00 (0) 'MS-DOS'\n-51C061 Extract Zip Spec      14 (20) '2.0'\n-51C062 Extract OS            00 (0) 'MS-DOS'\n-51C063 General Purpose Flag  0000 (0)\n-51C065 Compression Method    0000 (0) 'Stored'\n-51C067 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C06B CRC                   00000000 (0)\n-51C06F Compressed Size       00000000 (0)\n-51C073 Uncompressed Size     00000000 (0)\n-51C077 Filename Length       0078 (120)\n-51C079 Extra Length          0009 (9)\n-51C07B Comment Length        0000 (0)\n-51C07D Disk Start            0000 (0)\n-51C07F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C081 Ext File Attributes   00000000 (0)\n-51C085 Local Header Offset   000B1E29 (728617)\n-51C089 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C089: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C101 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C103   Length              0005 (5)\n-51C105   Flags               01 (1) 'Modification'\n-51C106   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C10A CENTRAL HEADER #275   02014B50 (33639248)\n-51C10E Created Zip Spec      14 (20) '2.0'\n-51C10F Created OS            00 (0) 'MS-DOS'\n-51C110 Extract Zip Spec      14 (20) '2.0'\n-51C111 Extract OS            00 (0) 'MS-DOS'\n-51C112 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C114 Compression Method    0000 (0) 'Stored'\n-51C116 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C11A CRC                   041CE92B (69003563)\n-51C11E Compressed Size       00000B22 (2850)\n-51C122 Uncompressed Size     00000B22 (2850)\n-51C126 Filename Length       008E (142)\n-51C128 Extra Length          0009 (9)\n-51C12A Comment Length        0000 (0)\n-51C12C Disk Start            0000 (0)\n-51C12E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C130 Ext File Attributes   00000000 (0)\n-51C134 Local Header Offset   000B1EC8 (728776)\n-51C138 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51B582 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B584   Length              0005 (5)\n+51B586   Flags               01 (1) 'Modification'\n+51B587   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B58B CENTRAL HEADER #256   02014B50 (33639248)\n+51B58F Created Zip Spec      14 (20) '2.0'\n+51B590 Created OS            00 (0) 'MS-DOS'\n+51B591 Extract Zip Spec      14 (20) '2.0'\n+51B592 Extract OS            00 (0) 'MS-DOS'\n+51B593 General Purpose Flag  0000 (0)\n+51B595 Compression Method    0000 (0) 'Stored'\n+51B597 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B59B CRC                   00000000 (0)\n+51B59F Compressed Size       00000000 (0)\n+51B5A3 Uncompressed Size     00000000 (0)\n+51B5A7 Filename Length       0028 (40)\n+51B5A9 Extra Length          0009 (9)\n+51B5AB Comment Length        0000 (0)\n+51B5AD Disk Start            0000 (0)\n+51B5AF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B5B1 Ext File Attributes   00000000 (0)\n+51B5B5 Local Header Offset   000A2DD6 (667094)\n+51B5B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B5B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B5E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B5E3   Length              0005 (5)\n+51B5E5   Flags               01 (1) 'Modification'\n+51B5E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B5EA CENTRAL HEADER #257   02014B50 (33639248)\n+51B5EE Created Zip Spec      14 (20) '2.0'\n+51B5EF Created OS            00 (0) 'MS-DOS'\n+51B5F0 Extract Zip Spec      14 (20) '2.0'\n+51B5F1 Extract OS            00 (0) 'MS-DOS'\n+51B5F2 General Purpose Flag  0000 (0)\n+51B5F4 Compression Method    0000 (0) 'Stored'\n+51B5F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B5FA CRC                   00000000 (0)\n+51B5FE Compressed Size       00000000 (0)\n+51B602 Uncompressed Size     00000000 (0)\n+51B606 Filename Length       0031 (49)\n+51B608 Extra Length          0009 (9)\n+51B60A Comment Length        0000 (0)\n+51B60C Disk Start            0000 (0)\n+51B60E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B610 Ext File Attributes   00000000 (0)\n+51B614 Local Header Offset   000A2E25 (667173)\n+51B618 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B618: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B64B   Length              0005 (5)\n+51B64D   Flags               01 (1) 'Modification'\n+51B64E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B652 CENTRAL HEADER #258   02014B50 (33639248)\n+51B656 Created Zip Spec      14 (20) '2.0'\n+51B657 Created OS            00 (0) 'MS-DOS'\n+51B658 Extract Zip Spec      14 (20) '2.0'\n+51B659 Extract OS            00 (0) 'MS-DOS'\n+51B65A General Purpose Flag  0000 (0)\n+51B65C Compression Method    0000 (0) 'Stored'\n+51B65E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B662 CRC                   00000000 (0)\n+51B666 Compressed Size       00000000 (0)\n+51B66A Uncompressed Size     00000000 (0)\n+51B66E Filename Length       0061 (97)\n+51B670 Extra Length          0009 (9)\n+51B672 Comment Length        0000 (0)\n+51B674 Disk Start            0000 (0)\n+51B676 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B678 Ext File Attributes   00000000 (0)\n+51B67C Local Header Offset   000A2E7D (667261)\n+51B680 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B680: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B6E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B6E3   Length              0005 (5)\n+51B6E5   Flags               01 (1) 'Modification'\n+51B6E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B6EA CENTRAL HEADER #259   02014B50 (33639248)\n+51B6EE Created Zip Spec      14 (20) '2.0'\n+51B6EF Created OS            00 (0) 'MS-DOS'\n+51B6F0 Extract Zip Spec      14 (20) '2.0'\n+51B6F1 Extract OS            00 (0) 'MS-DOS'\n+51B6F2 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B6F4 Compression Method    0000 (0) 'Stored'\n+51B6F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B6FA CRC                   9B32EF54 (2603806548)\n+51B6FE Compressed Size       000054C4 (21700)\n+51B702 Uncompressed Size     000054C4 (21700)\n+51B706 Filename Length       0077 (119)\n+51B708 Extra Length          0009 (9)\n+51B70A Comment Length        0000 (0)\n+51B70C Disk Start            0000 (0)\n+51B70E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B710 Ext File Attributes   00000000 (0)\n+51B714 Local Header Offset   000A2F05 (667397)\n+51B718 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B718: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B78F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B791   Length              0005 (5)\n+51B793   Flags               01 (1) 'Modification'\n+51B794   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B798 CENTRAL HEADER #260   02014B50 (33639248)\n+51B79C Created Zip Spec      14 (20) '2.0'\n+51B79D Created OS            00 (0) 'MS-DOS'\n+51B79E Extract Zip Spec      14 (20) '2.0'\n+51B79F Extract OS            00 (0) 'MS-DOS'\n+51B7A0 General Purpose Flag  0000 (0)\n+51B7A2 Compression Method    0000 (0) 'Stored'\n+51B7A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B7A8 CRC                   00000000 (0)\n+51B7AC Compressed Size       00000000 (0)\n+51B7B0 Uncompressed Size     00000000 (0)\n+51B7B4 Filename Length       0068 (104)\n+51B7B6 Extra Length          0009 (9)\n+51B7B8 Comment Length        0000 (0)\n+51B7BA Disk Start            0000 (0)\n+51B7BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B7BE Ext File Attributes   00000000 (0)\n+51B7C2 Local Header Offset   000A8477 (689271)\n+51B7C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B7C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B82E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B830   Length              0005 (5)\n+51B832   Flags               01 (1) 'Modification'\n+51B833   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B837 CENTRAL HEADER #261   02014B50 (33639248)\n+51B83B Created Zip Spec      14 (20) '2.0'\n+51B83C Created OS            00 (0) 'MS-DOS'\n+51B83D Extract Zip Spec      14 (20) '2.0'\n+51B83E Extract OS            00 (0) 'MS-DOS'\n+51B83F General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B841 Compression Method    0000 (0) 'Stored'\n+51B843 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B847 CRC                   4975042F (1232405551)\n+51B84B Compressed Size       00001B21 (6945)\n+51B84F Uncompressed Size     00001B21 (6945)\n+51B853 Filename Length       007E (126)\n+51B855 Extra Length          0009 (9)\n+51B857 Comment Length        0000 (0)\n+51B859 Disk Start            0000 (0)\n+51B85B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B85D Ext File Attributes   00000000 (0)\n+51B861 Local Header Offset   000A8506 (689414)\n+51B865 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B865: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B8E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B8E5   Length              0005 (5)\n+51B8E7   Flags               01 (1) 'Modification'\n+51B8E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B8EC CENTRAL HEADER #262   02014B50 (33639248)\n+51B8F0 Created Zip Spec      14 (20) '2.0'\n+51B8F1 Created OS            00 (0) 'MS-DOS'\n+51B8F2 Extract Zip Spec      14 (20) '2.0'\n+51B8F3 Extract OS            00 (0) 'MS-DOS'\n+51B8F4 General Purpose Flag  0000 (0)\n+51B8F6 Compression Method    0000 (0) 'Stored'\n+51B8F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B8FC CRC                   00000000 (0)\n+51B900 Compressed Size       00000000 (0)\n+51B904 Uncompressed Size     00000000 (0)\n+51B908 Filename Length       006B (107)\n+51B90A Extra Length          0009 (9)\n+51B90C Comment Length        0000 (0)\n+51B90E Disk Start            0000 (0)\n+51B910 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B912 Ext File Attributes   00000000 (0)\n+51B916 Local Header Offset   000AA0DC (696540)\n+51B91A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B91A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51B985 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51B987   Length              0005 (5)\n+51B989   Flags               01 (1) 'Modification'\n+51B98A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51B98E CENTRAL HEADER #263   02014B50 (33639248)\n+51B992 Created Zip Spec      14 (20) '2.0'\n+51B993 Created OS            00 (0) 'MS-DOS'\n+51B994 Extract Zip Spec      14 (20) '2.0'\n+51B995 Extract OS            00 (0) 'MS-DOS'\n+51B996 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51B998 Compression Method    0000 (0) 'Stored'\n+51B99A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51B99E CRC                   27E12F4C (669069132)\n+51B9A2 Compressed Size       000014EA (5354)\n+51B9A6 Uncompressed Size     000014EA (5354)\n+51B9AA Filename Length       0081 (129)\n+51B9AC Extra Length          0009 (9)\n+51B9AE Comment Length        0000 (0)\n+51B9B0 Disk Start            0000 (0)\n+51B9B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51B9B4 Ext File Attributes   00000000 (0)\n+51B9B8 Local Header Offset   000AA16E (696686)\n+51B9BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51B9BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BA3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BA3F   Length              0005 (5)\n+51BA41   Flags               01 (1) 'Modification'\n+51BA42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BA46 CENTRAL HEADER #264   02014B50 (33639248)\n+51BA4A Created Zip Spec      14 (20) '2.0'\n+51BA4B Created OS            00 (0) 'MS-DOS'\n+51BA4C Extract Zip Spec      14 (20) '2.0'\n+51BA4D Extract OS            00 (0) 'MS-DOS'\n+51BA4E General Purpose Flag  0000 (0)\n+51BA50 Compression Method    0000 (0) 'Stored'\n+51BA52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BA56 CRC                   00000000 (0)\n+51BA5A Compressed Size       00000000 (0)\n+51BA5E Uncompressed Size     00000000 (0)\n+51BA62 Filename Length       006B (107)\n+51BA64 Extra Length          0009 (9)\n+51BA66 Comment Length        0000 (0)\n+51BA68 Disk Start            0000 (0)\n+51BA6A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BA6C Ext File Attributes   00000000 (0)\n+51BA70 Local Header Offset   000AB710 (702224)\n+51BA74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BA74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BADF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BAE1   Length              0005 (5)\n+51BAE3   Flags               01 (1) 'Modification'\n+51BAE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BAE8 CENTRAL HEADER #265   02014B50 (33639248)\n+51BAEC Created Zip Spec      14 (20) '2.0'\n+51BAED Created OS            00 (0) 'MS-DOS'\n+51BAEE Extract Zip Spec      14 (20) '2.0'\n+51BAEF Extract OS            00 (0) 'MS-DOS'\n+51BAF0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51BAF2 Compression Method    0000 (0) 'Stored'\n+51BAF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BAF8 CRC                   3E8950DE (1049186526)\n+51BAFC Compressed Size       000036E0 (14048)\n+51BB00 Uncompressed Size     000036E0 (14048)\n+51BB04 Filename Length       0081 (129)\n+51BB06 Extra Length          0009 (9)\n+51BB08 Comment Length        0000 (0)\n+51BB0A Disk Start            0000 (0)\n+51BB0C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BB0E Ext File Attributes   00000000 (0)\n+51BB12 Local Header Offset   000AB7A2 (702370)\n+51BB16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BB16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BB97 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BB99   Length              0005 (5)\n+51BB9B   Flags               01 (1) 'Modification'\n+51BB9C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BBA0 CENTRAL HEADER #266   02014B50 (33639248)\n+51BBA4 Created Zip Spec      14 (20) '2.0'\n+51BBA5 Created OS            00 (0) 'MS-DOS'\n+51BBA6 Extract Zip Spec      14 (20) '2.0'\n+51BBA7 Extract OS            00 (0) 'MS-DOS'\n+51BBA8 General Purpose Flag  0000 (0)\n+51BBAA Compression Method    0000 (0) 'Stored'\n+51BBAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BBB0 CRC                   00000000 (0)\n+51BBB4 Compressed Size       00000000 (0)\n+51BBB8 Uncompressed Size     00000000 (0)\n+51BBBC Filename Length       006A (106)\n+51BBBE Extra Length          0009 (9)\n+51BBC0 Comment Length        0000 (0)\n+51BBC2 Disk Start            0000 (0)\n+51BBC4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BBC6 Ext File Attributes   00000000 (0)\n+51BBCA Local Header Offset   000AEF3A (716602)\n+51BBCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BBCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BC38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BC3A   Length              0005 (5)\n+51BC3C   Flags               01 (1) 'Modification'\n+51BC3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BC41 CENTRAL HEADER #267   02014B50 (33639248)\n+51BC45 Created Zip Spec      14 (20) '2.0'\n+51BC46 Created OS            00 (0) 'MS-DOS'\n+51BC47 Extract Zip Spec      14 (20) '2.0'\n+51BC48 Extract OS            00 (0) 'MS-DOS'\n+51BC49 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51BC4B Compression Method    0000 (0) 'Stored'\n+51BC4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BC51 CRC                   A9B3A4D7 (2847122647)\n+51BC55 Compressed Size       00002051 (8273)\n+51BC59 Uncompressed Size     00002051 (8273)\n+51BC5D Filename Length       0080 (128)\n+51BC5F Extra Length          0009 (9)\n+51BC61 Comment Length        0000 (0)\n+51BC63 Disk Start            0000 (0)\n+51BC65 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BC67 Ext File Attributes   00000000 (0)\n+51BC6B Local Header Offset   000AEFCB (716747)\n+51BC6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BC6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BCEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BCF1   Length              0005 (5)\n+51BCF3   Flags               01 (1) 'Modification'\n+51BCF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BCF8 CENTRAL HEADER #268   02014B50 (33639248)\n+51BCFC Created Zip Spec      14 (20) '2.0'\n+51BCFD Created OS            00 (0) 'MS-DOS'\n+51BCFE Extract Zip Spec      14 (20) '2.0'\n+51BCFF Extract OS            00 (0) 'MS-DOS'\n+51BD00 General Purpose Flag  0000 (0)\n+51BD02 Compression Method    0000 (0) 'Stored'\n+51BD04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BD08 CRC                   00000000 (0)\n+51BD0C Compressed Size       00000000 (0)\n+51BD10 Uncompressed Size     00000000 (0)\n+51BD14 Filename Length       0026 (38)\n+51BD16 Extra Length          0009 (9)\n+51BD18 Comment Length        0000 (0)\n+51BD1A Disk Start            0000 (0)\n+51BD1C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BD1E Ext File Attributes   00000000 (0)\n+51BD22 Local Header Offset   000B10D3 (725203)\n+51BD26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BD26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BD4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BD4E   Length              0005 (5)\n+51BD50   Flags               01 (1) 'Modification'\n+51BD51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BD55 CENTRAL HEADER #269   02014B50 (33639248)\n+51BD59 Created Zip Spec      14 (20) '2.0'\n+51BD5A Created OS            00 (0) 'MS-DOS'\n+51BD5B Extract Zip Spec      14 (20) '2.0'\n+51BD5C Extract OS            00 (0) 'MS-DOS'\n+51BD5D General Purpose Flag  0000 (0)\n+51BD5F Compression Method    0000 (0) 'Stored'\n+51BD61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BD65 CRC                   00000000 (0)\n+51BD69 Compressed Size       00000000 (0)\n+51BD6D Uncompressed Size     00000000 (0)\n+51BD71 Filename Length       002F (47)\n+51BD73 Extra Length          0009 (9)\n+51BD75 Comment Length        0000 (0)\n+51BD77 Disk Start            0000 (0)\n+51BD79 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BD7B Ext File Attributes   00000000 (0)\n+51BD7F Local Header Offset   000B1120 (725280)\n+51BD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BDB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BDB4   Length              0005 (5)\n+51BDB6   Flags               01 (1) 'Modification'\n+51BDB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BDBB CENTRAL HEADER #270   02014B50 (33639248)\n+51BDBF Created Zip Spec      14 (20) '2.0'\n+51BDC0 Created OS            00 (0) 'MS-DOS'\n+51BDC1 Extract Zip Spec      14 (20) '2.0'\n+51BDC2 Extract OS            00 (0) 'MS-DOS'\n+51BDC3 General Purpose Flag  0000 (0)\n+51BDC5 Compression Method    0000 (0) 'Stored'\n+51BDC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BDCB CRC                   00000000 (0)\n+51BDCF Compressed Size       00000000 (0)\n+51BDD3 Uncompressed Size     00000000 (0)\n+51BDD7 Filename Length       005D (93)\n+51BDD9 Extra Length          0009 (9)\n+51BDDB Comment Length        0000 (0)\n+51BDDD Disk Start            0000 (0)\n+51BDDF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BDE1 Ext File Attributes   00000000 (0)\n+51BDE5 Local Header Offset   000B1176 (725366)\n+51BDE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BDE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BE46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BE48   Length              0005 (5)\n+51BE4A   Flags               01 (1) 'Modification'\n+51BE4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BE4F CENTRAL HEADER #271   02014B50 (33639248)\n+51BE53 Created Zip Spec      14 (20) '2.0'\n+51BE54 Created OS            00 (0) 'MS-DOS'\n+51BE55 Extract Zip Spec      14 (20) '2.0'\n+51BE56 Extract OS            00 (0) 'MS-DOS'\n+51BE57 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51BE59 Compression Method    0000 (0) 'Stored'\n+51BE5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BE5F CRC                   B12610E6 (2972061926)\n+51BE63 Compressed Size       00000A5B (2651)\n+51BE67 Uncompressed Size     00000A5B (2651)\n+51BE6B Filename Length       0073 (115)\n+51BE6D Extra Length          0009 (9)\n+51BE6F Comment Length        0000 (0)\n+51BE71 Disk Start            0000 (0)\n+51BE73 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BE75 Ext File Attributes   00000000 (0)\n+51BE79 Local Header Offset   000B11FA (725498)\n+51BE7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BE7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BEF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BEF2   Length              0005 (5)\n+51BEF4   Flags               01 (1) 'Modification'\n+51BEF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BEF9 CENTRAL HEADER #272   02014B50 (33639248)\n+51BEFD Created Zip Spec      14 (20) '2.0'\n+51BEFE Created OS            00 (0) 'MS-DOS'\n+51BEFF Extract Zip Spec      14 (20) '2.0'\n+51BF00 Extract OS            00 (0) 'MS-DOS'\n+51BF01 General Purpose Flag  0000 (0)\n+51BF03 Compression Method    0000 (0) 'Stored'\n+51BF05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BF09 CRC                   00000000 (0)\n+51BF0D Compressed Size       00000000 (0)\n+51BF11 Uncompressed Size     00000000 (0)\n+51BF15 Filename Length       0035 (53)\n+51BF17 Extra Length          0009 (9)\n+51BF19 Comment Length        0000 (0)\n+51BF1B Disk Start            0000 (0)\n+51BF1D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BF1F Ext File Attributes   00000000 (0)\n+51BF23 Local Header Offset   000B1CFF (728319)\n+51BF27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BF27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BF5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BF5E   Length              0005 (5)\n+51BF60   Flags               01 (1) 'Modification'\n+51BF61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BF65 CENTRAL HEADER #273   02014B50 (33639248)\n+51BF69 Created Zip Spec      14 (20) '2.0'\n+51BF6A Created OS            00 (0) 'MS-DOS'\n+51BF6B Extract Zip Spec      14 (20) '2.0'\n+51BF6C Extract OS            00 (0) 'MS-DOS'\n+51BF6D General Purpose Flag  0000 (0)\n+51BF6F Compression Method    0000 (0) 'Stored'\n+51BF71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BF75 CRC                   00000000 (0)\n+51BF79 Compressed Size       00000000 (0)\n+51BF7D Uncompressed Size     00000000 (0)\n+51BF81 Filename Length       003E (62)\n+51BF83 Extra Length          0009 (9)\n+51BF85 Comment Length        0000 (0)\n+51BF87 Disk Start            0000 (0)\n+51BF89 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51BF8B Ext File Attributes   00000000 (0)\n+51BF8F Local Header Offset   000B1D5B (728411)\n+51BF93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51BF93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51BFD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51BFD3   Length              0005 (5)\n+51BFD5   Flags               01 (1) 'Modification'\n+51BFD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51BFDA CENTRAL HEADER #274   02014B50 (33639248)\n+51BFDE Created Zip Spec      14 (20) '2.0'\n+51BFDF Created OS            00 (0) 'MS-DOS'\n+51BFE0 Extract Zip Spec      14 (20) '2.0'\n+51BFE1 Extract OS            00 (0) 'MS-DOS'\n+51BFE2 General Purpose Flag  0000 (0)\n+51BFE4 Compression Method    0000 (0) 'Stored'\n+51BFE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51BFEA CRC                   00000000 (0)\n+51BFEE Compressed Size       00000000 (0)\n+51BFF2 Uncompressed Size     00000000 (0)\n+51BFF6 Filename Length       0078 (120)\n+51BFF8 Extra Length          0009 (9)\n+51BFFA Comment Length        0000 (0)\n+51BFFC Disk Start            0000 (0)\n+51BFFE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C000 Ext File Attributes   00000000 (0)\n+51C004 Local Header Offset   000B1DC0 (728512)\n+51C008 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C008: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C080 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C082   Length              0005 (5)\n+51C084   Flags               01 (1) 'Modification'\n+51C085   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C089 CENTRAL HEADER #275   02014B50 (33639248)\n+51C08D Created Zip Spec      14 (20) '2.0'\n+51C08E Created OS            00 (0) 'MS-DOS'\n+51C08F Extract Zip Spec      14 (20) '2.0'\n+51C090 Extract OS            00 (0) 'MS-DOS'\n+51C091 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C093 Compression Method    0000 (0) 'Stored'\n+51C095 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C099 CRC                   041CE92B (69003563)\n+51C09D Compressed Size       00000B22 (2850)\n+51C0A1 Uncompressed Size     00000B22 (2850)\n+51C0A5 Filename Length       008E (142)\n+51C0A7 Extra Length          0009 (9)\n+51C0A9 Comment Length        0000 (0)\n+51C0AB Disk Start            0000 (0)\n+51C0AD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C0AF Ext File Attributes   00000000 (0)\n+51C0B3 Local Header Offset   000B1E5F (728671)\n+51C0B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXX'\n #\n-# WARNING: Offset 0x51C138: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51C0B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51C1C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C1C8   Length              0005 (5)\n-51C1CA   Flags               01 (1) 'Modification'\n-51C1CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C1CF CENTRAL HEADER #276   02014B50 (33639248)\n-51C1D3 Created Zip Spec      14 (20) '2.0'\n-51C1D4 Created OS            00 (0) 'MS-DOS'\n-51C1D5 Extract Zip Spec      14 (20) '2.0'\n-51C1D6 Extract OS            00 (0) 'MS-DOS'\n-51C1D7 General Purpose Flag  0000 (0)\n-51C1D9 Compression Method    0000 (0) 'Stored'\n-51C1DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C1DF CRC                   00000000 (0)\n-51C1E3 Compressed Size       00000000 (0)\n-51C1E7 Uncompressed Size     00000000 (0)\n-51C1EB Filename Length       0077 (119)\n-51C1ED Extra Length          0009 (9)\n-51C1EF Comment Length        0000 (0)\n-51C1F1 Disk Start            0000 (0)\n-51C1F3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C1F5 Ext File Attributes   00000000 (0)\n-51C1F9 Local Header Offset   000B2AAF (731823)\n-51C1FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C1FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C274 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C276   Length              0005 (5)\n-51C278   Flags               01 (1) 'Modification'\n-51C279   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C27D CENTRAL HEADER #277   02014B50 (33639248)\n-51C281 Created Zip Spec      14 (20) '2.0'\n-51C282 Created OS            00 (0) 'MS-DOS'\n-51C283 Extract Zip Spec      14 (20) '2.0'\n-51C284 Extract OS            00 (0) 'MS-DOS'\n-51C285 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C287 Compression Method    0000 (0) 'Stored'\n-51C289 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C28D CRC                   16A4BA93 (379894419)\n-51C291 Compressed Size       000016E4 (5860)\n-51C295 Uncompressed Size     000016E4 (5860)\n-51C299 Filename Length       008D (141)\n-51C29B Extra Length          0009 (9)\n-51C29D Comment Length        0000 (0)\n-51C29F Disk Start            0000 (0)\n-51C2A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C2A3 Ext File Attributes   00000000 (0)\n-51C2A7 Local Header Offset   000B2B4D (731981)\n-51C2AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51C145 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C147   Length              0005 (5)\n+51C149   Flags               01 (1) 'Modification'\n+51C14A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C14E CENTRAL HEADER #276   02014B50 (33639248)\n+51C152 Created Zip Spec      14 (20) '2.0'\n+51C153 Created OS            00 (0) 'MS-DOS'\n+51C154 Extract Zip Spec      14 (20) '2.0'\n+51C155 Extract OS            00 (0) 'MS-DOS'\n+51C156 General Purpose Flag  0000 (0)\n+51C158 Compression Method    0000 (0) 'Stored'\n+51C15A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C15E CRC                   00000000 (0)\n+51C162 Compressed Size       00000000 (0)\n+51C166 Uncompressed Size     00000000 (0)\n+51C16A Filename Length       0077 (119)\n+51C16C Extra Length          0009 (9)\n+51C16E Comment Length        0000 (0)\n+51C170 Disk Start            0000 (0)\n+51C172 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C174 Ext File Attributes   00000000 (0)\n+51C178 Local Header Offset   000B2A46 (731718)\n+51C17C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C17C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C1F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C1F5   Length              0005 (5)\n+51C1F7   Flags               01 (1) 'Modification'\n+51C1F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C1FC CENTRAL HEADER #277   02014B50 (33639248)\n+51C200 Created Zip Spec      14 (20) '2.0'\n+51C201 Created OS            00 (0) 'MS-DOS'\n+51C202 Extract Zip Spec      14 (20) '2.0'\n+51C203 Extract OS            00 (0) 'MS-DOS'\n+51C204 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C206 Compression Method    0000 (0) 'Stored'\n+51C208 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C20C CRC                   16A4BA93 (379894419)\n+51C210 Compressed Size       000016E4 (5860)\n+51C214 Uncompressed Size     000016E4 (5860)\n+51C218 Filename Length       008D (141)\n+51C21A Extra Length          0009 (9)\n+51C21C Comment Length        0000 (0)\n+51C21E Disk Start            0000 (0)\n+51C220 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C222 Ext File Attributes   00000000 (0)\n+51C226 Local Header Offset   000B2AE4 (731876)\n+51C22A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXX'\n #\n-# WARNING: Offset 0x51C2AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51C22A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51C338 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C33A   Length              0005 (5)\n-51C33C   Flags               01 (1) 'Modification'\n-51C33D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C341 CENTRAL HEADER #278   02014B50 (33639248)\n-51C345 Created Zip Spec      14 (20) '2.0'\n-51C346 Created OS            00 (0) 'MS-DOS'\n-51C347 Extract Zip Spec      14 (20) '2.0'\n-51C348 Extract OS            00 (0) 'MS-DOS'\n-51C349 General Purpose Flag  0000 (0)\n-51C34B Compression Method    0000 (0) 'Stored'\n-51C34D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C351 CRC                   00000000 (0)\n-51C355 Compressed Size       00000000 (0)\n-51C359 Uncompressed Size     00000000 (0)\n-51C35D Filename Length       007A (122)\n-51C35F Extra Length          0009 (9)\n-51C361 Comment Length        0000 (0)\n-51C363 Disk Start            0000 (0)\n-51C365 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C367 Ext File Attributes   00000000 (0)\n-51C36B Local Header Offset   000B42F5 (738037)\n-51C36F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C36F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C3E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C3EB   Length              0005 (5)\n-51C3ED   Flags               01 (1) 'Modification'\n-51C3EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C3F2 CENTRAL HEADER #279   02014B50 (33639248)\n-51C3F6 Created Zip Spec      14 (20) '2.0'\n-51C3F7 Created OS            00 (0) 'MS-DOS'\n-51C3F8 Extract Zip Spec      14 (20) '2.0'\n-51C3F9 Extract OS            00 (0) 'MS-DOS'\n-51C3FA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C3FC Compression Method    0000 (0) 'Stored'\n-51C3FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C402 CRC                   390AB403 (957002755)\n-51C406 Compressed Size       00001068 (4200)\n-51C40A Uncompressed Size     00001068 (4200)\n-51C40E Filename Length       0090 (144)\n-51C410 Extra Length          0009 (9)\n-51C412 Comment Length        0000 (0)\n-51C414 Disk Start            0000 (0)\n-51C416 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C418 Ext File Attributes   00000000 (0)\n-51C41C Local Header Offset   000B4396 (738198)\n-51C420 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51C2B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C2B9   Length              0005 (5)\n+51C2BB   Flags               01 (1) 'Modification'\n+51C2BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C2C0 CENTRAL HEADER #278   02014B50 (33639248)\n+51C2C4 Created Zip Spec      14 (20) '2.0'\n+51C2C5 Created OS            00 (0) 'MS-DOS'\n+51C2C6 Extract Zip Spec      14 (20) '2.0'\n+51C2C7 Extract OS            00 (0) 'MS-DOS'\n+51C2C8 General Purpose Flag  0000 (0)\n+51C2CA Compression Method    0000 (0) 'Stored'\n+51C2CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C2D0 CRC                   00000000 (0)\n+51C2D4 Compressed Size       00000000 (0)\n+51C2D8 Uncompressed Size     00000000 (0)\n+51C2DC Filename Length       007A (122)\n+51C2DE Extra Length          0009 (9)\n+51C2E0 Comment Length        0000 (0)\n+51C2E2 Disk Start            0000 (0)\n+51C2E4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C2E6 Ext File Attributes   00000000 (0)\n+51C2EA Local Header Offset   000B428C (737932)\n+51C2EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C2EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C368 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C36A   Length              0005 (5)\n+51C36C   Flags               01 (1) 'Modification'\n+51C36D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C371 CENTRAL HEADER #279   02014B50 (33639248)\n+51C375 Created Zip Spec      14 (20) '2.0'\n+51C376 Created OS            00 (0) 'MS-DOS'\n+51C377 Extract Zip Spec      14 (20) '2.0'\n+51C378 Extract OS            00 (0) 'MS-DOS'\n+51C379 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C37B Compression Method    0000 (0) 'Stored'\n+51C37D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C381 CRC                   390AB403 (957002755)\n+51C385 Compressed Size       00001068 (4200)\n+51C389 Uncompressed Size     00001068 (4200)\n+51C38D Filename Length       0090 (144)\n+51C38F Extra Length          0009 (9)\n+51C391 Comment Length        0000 (0)\n+51C393 Disk Start            0000 (0)\n+51C395 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C397 Ext File Attributes   00000000 (0)\n+51C39B Local Header Offset   000B432D (738093)\n+51C39F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x51C420: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51C39F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51C4B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C4B2   Length              0005 (5)\n-51C4B4   Flags               01 (1) 'Modification'\n-51C4B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C4B9 CENTRAL HEADER #280   02014B50 (33639248)\n-51C4BD Created Zip Spec      14 (20) '2.0'\n-51C4BE Created OS            00 (0) 'MS-DOS'\n-51C4BF Extract Zip Spec      14 (20) '2.0'\n-51C4C0 Extract OS            00 (0) 'MS-DOS'\n-51C4C1 General Purpose Flag  0000 (0)\n-51C4C3 Compression Method    0000 (0) 'Stored'\n-51C4C5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C4C9 CRC                   00000000 (0)\n-51C4CD Compressed Size       00000000 (0)\n-51C4D1 Uncompressed Size     00000000 (0)\n-51C4D5 Filename Length       0076 (118)\n-51C4D7 Extra Length          0009 (9)\n-51C4D9 Comment Length        0000 (0)\n-51C4DB Disk Start            0000 (0)\n-51C4DD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C4DF Ext File Attributes   00000000 (0)\n-51C4E3 Local Header Offset   000B54C5 (742597)\n-51C4E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C4E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C55D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C55F   Length              0005 (5)\n-51C561   Flags               01 (1) 'Modification'\n-51C562   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C566 CENTRAL HEADER #281   02014B50 (33639248)\n-51C56A Created Zip Spec      14 (20) '2.0'\n-51C56B Created OS            00 (0) 'MS-DOS'\n-51C56C Extract Zip Spec      14 (20) '2.0'\n-51C56D Extract OS            00 (0) 'MS-DOS'\n-51C56E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C570 Compression Method    0000 (0) 'Stored'\n-51C572 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C576 CRC                   3DE98548 (1038714184)\n-51C57A Compressed Size       000016AA (5802)\n-51C57E Uncompressed Size     000016AA (5802)\n-51C582 Filename Length       008C (140)\n-51C584 Extra Length          0009 (9)\n-51C586 Comment Length        0000 (0)\n-51C588 Disk Start            0000 (0)\n-51C58A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C58C Ext File Attributes   00000000 (0)\n-51C590 Local Header Offset   000B5562 (742754)\n-51C594 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51C42F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C431   Length              0005 (5)\n+51C433   Flags               01 (1) 'Modification'\n+51C434   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C438 CENTRAL HEADER #280   02014B50 (33639248)\n+51C43C Created Zip Spec      14 (20) '2.0'\n+51C43D Created OS            00 (0) 'MS-DOS'\n+51C43E Extract Zip Spec      14 (20) '2.0'\n+51C43F Extract OS            00 (0) 'MS-DOS'\n+51C440 General Purpose Flag  0000 (0)\n+51C442 Compression Method    0000 (0) 'Stored'\n+51C444 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C448 CRC                   00000000 (0)\n+51C44C Compressed Size       00000000 (0)\n+51C450 Uncompressed Size     00000000 (0)\n+51C454 Filename Length       0076 (118)\n+51C456 Extra Length          0009 (9)\n+51C458 Comment Length        0000 (0)\n+51C45A Disk Start            0000 (0)\n+51C45C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C45E Ext File Attributes   00000000 (0)\n+51C462 Local Header Offset   000B545C (742492)\n+51C466 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C466: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C4DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C4DE   Length              0005 (5)\n+51C4E0   Flags               01 (1) 'Modification'\n+51C4E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C4E5 CENTRAL HEADER #281   02014B50 (33639248)\n+51C4E9 Created Zip Spec      14 (20) '2.0'\n+51C4EA Created OS            00 (0) 'MS-DOS'\n+51C4EB Extract Zip Spec      14 (20) '2.0'\n+51C4EC Extract OS            00 (0) 'MS-DOS'\n+51C4ED General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C4EF Compression Method    0000 (0) 'Stored'\n+51C4F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C4F5 CRC                   3DE98548 (1038714184)\n+51C4F9 Compressed Size       000016AA (5802)\n+51C4FD Uncompressed Size     000016AA (5802)\n+51C501 Filename Length       008C (140)\n+51C503 Extra Length          0009 (9)\n+51C505 Comment Length        0000 (0)\n+51C507 Disk Start            0000 (0)\n+51C509 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C50B Ext File Attributes   00000000 (0)\n+51C50F Local Header Offset   000B54F9 (742649)\n+51C513 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXX'\n #\n-# WARNING: Offset 0x51C594: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x51C513: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-51C620 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C622   Length              0005 (5)\n-51C624   Flags               01 (1) 'Modification'\n-51C625   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C629 CENTRAL HEADER #282   02014B50 (33639248)\n-51C62D Created Zip Spec      14 (20) '2.0'\n-51C62E Created OS            00 (0) 'MS-DOS'\n-51C62F Extract Zip Spec      14 (20) '2.0'\n-51C630 Extract OS            00 (0) 'MS-DOS'\n-51C631 General Purpose Flag  0000 (0)\n-51C633 Compression Method    0000 (0) 'Stored'\n-51C635 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C639 CRC                   00000000 (0)\n-51C63D Compressed Size       00000000 (0)\n-51C641 Uncompressed Size     00000000 (0)\n-51C645 Filename Length       0024 (36)\n-51C647 Extra Length          0009 (9)\n-51C649 Comment Length        0000 (0)\n-51C64B Disk Start            0000 (0)\n-51C64D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C64F Ext File Attributes   00000000 (0)\n-51C653 Local Header Offset   000B6CCF (748751)\n-51C657 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C657: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C67B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C67D   Length              0005 (5)\n-51C67F   Flags               01 (1) 'Modification'\n-51C680   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C684 CENTRAL HEADER #283   02014B50 (33639248)\n-51C688 Created Zip Spec      14 (20) '2.0'\n-51C689 Created OS            00 (0) 'MS-DOS'\n-51C68A Extract Zip Spec      14 (20) '2.0'\n-51C68B Extract OS            00 (0) 'MS-DOS'\n-51C68C General Purpose Flag  0000 (0)\n-51C68E Compression Method    0000 (0) 'Stored'\n-51C690 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C694 CRC                   00000000 (0)\n-51C698 Compressed Size       00000000 (0)\n-51C69C Uncompressed Size     00000000 (0)\n-51C6A0 Filename Length       002D (45)\n-51C6A2 Extra Length          0009 (9)\n-51C6A4 Comment Length        0000 (0)\n-51C6A6 Disk Start            0000 (0)\n-51C6A8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C6AA Ext File Attributes   00000000 (0)\n-51C6AE Local Header Offset   000B6D1A (748826)\n-51C6B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C6B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C6DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C6E1   Length              0005 (5)\n-51C6E3   Flags               01 (1) 'Modification'\n-51C6E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C6E8 CENTRAL HEADER #284   02014B50 (33639248)\n-51C6EC Created Zip Spec      14 (20) '2.0'\n-51C6ED Created OS            00 (0) 'MS-DOS'\n-51C6EE Extract Zip Spec      14 (20) '2.0'\n-51C6EF Extract OS            00 (0) 'MS-DOS'\n-51C6F0 General Purpose Flag  0000 (0)\n-51C6F2 Compression Method    0000 (0) 'Stored'\n-51C6F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C6F8 CRC                   00000000 (0)\n-51C6FC Compressed Size       00000000 (0)\n-51C700 Uncompressed Size     00000000 (0)\n-51C704 Filename Length       005B (91)\n-51C706 Extra Length          0009 (9)\n-51C708 Comment Length        0000 (0)\n-51C70A Disk Start            0000 (0)\n-51C70C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C70E Ext File Attributes   00000000 (0)\n-51C712 Local Header Offset   000B6D6E (748910)\n-51C716 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C716: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C773   Length              0005 (5)\n-51C775   Flags               01 (1) 'Modification'\n-51C776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C77A CENTRAL HEADER #285   02014B50 (33639248)\n-51C77E Created Zip Spec      14 (20) '2.0'\n-51C77F Created OS            00 (0) 'MS-DOS'\n-51C780 Extract Zip Spec      14 (20) '2.0'\n-51C781 Extract OS            00 (0) 'MS-DOS'\n-51C782 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C784 Compression Method    0000 (0) 'Stored'\n-51C786 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C78A CRC                   561A3BB2 (1444559794)\n-51C78E Compressed Size       000018A8 (6312)\n-51C792 Uncompressed Size     000018A8 (6312)\n-51C796 Filename Length       0071 (113)\n-51C798 Extra Length          0009 (9)\n-51C79A Comment Length        0000 (0)\n-51C79C Disk Start            0000 (0)\n-51C79E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C7A0 Ext File Attributes   00000000 (0)\n-51C7A4 Local Header Offset   000B6DF0 (749040)\n-51C7A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C7A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C819 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C81B   Length              0005 (5)\n-51C81D   Flags               01 (1) 'Modification'\n-51C81E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C822 CENTRAL HEADER #286   02014B50 (33639248)\n-51C826 Created Zip Spec      14 (20) '2.0'\n-51C827 Created OS            00 (0) 'MS-DOS'\n-51C828 Extract Zip Spec      14 (20) '2.0'\n-51C829 Extract OS            00 (0) 'MS-DOS'\n-51C82A General Purpose Flag  0000 (0)\n-51C82C Compression Method    0000 (0) 'Stored'\n-51C82E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C832 CRC                   00000000 (0)\n-51C836 Compressed Size       00000000 (0)\n-51C83A Uncompressed Size     00000000 (0)\n-51C83E Filename Length       005A (90)\n-51C840 Extra Length          0009 (9)\n-51C842 Comment Length        0000 (0)\n-51C844 Disk Start            0000 (0)\n-51C846 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C848 Ext File Attributes   00000000 (0)\n-51C84C Local Header Offset   000B8740 (755520)\n-51C850 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C850: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C8AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C8AC   Length              0005 (5)\n-51C8AE   Flags               01 (1) 'Modification'\n-51C8AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C8B3 CENTRAL HEADER #287   02014B50 (33639248)\n-51C8B7 Created Zip Spec      14 (20) '2.0'\n-51C8B8 Created OS            00 (0) 'MS-DOS'\n-51C8B9 Extract Zip Spec      14 (20) '2.0'\n-51C8BA Extract OS            00 (0) 'MS-DOS'\n-51C8BB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C8BD Compression Method    0000 (0) 'Stored'\n-51C8BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C8C3 CRC                   A1D18B9C (2714864540)\n-51C8C7 Compressed Size       00001AC2 (6850)\n-51C8CB Uncompressed Size     00001AC2 (6850)\n-51C8CF Filename Length       0070 (112)\n-51C8D1 Extra Length          0009 (9)\n-51C8D3 Comment Length        0000 (0)\n-51C8D5 Disk Start            0000 (0)\n-51C8D7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C8D9 Ext File Attributes   00000000 (0)\n-51C8DD Local Header Offset   000B87C1 (755649)\n-51C8E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C8E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C951 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C953   Length              0005 (5)\n-51C955   Flags               01 (1) 'Modification'\n-51C956   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C95A CENTRAL HEADER #288   02014B50 (33639248)\n-51C95E Created Zip Spec      14 (20) '2.0'\n-51C95F Created OS            00 (0) 'MS-DOS'\n-51C960 Extract Zip Spec      14 (20) '2.0'\n-51C961 Extract OS            00 (0) 'MS-DOS'\n-51C962 General Purpose Flag  0000 (0)\n-51C964 Compression Method    0000 (0) 'Stored'\n-51C966 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C96A CRC                   00000000 (0)\n-51C96E Compressed Size       00000000 (0)\n-51C972 Uncompressed Size     00000000 (0)\n-51C976 Filename Length       005B (91)\n-51C978 Extra Length          0009 (9)\n-51C97A Comment Length        0000 (0)\n-51C97C Disk Start            0000 (0)\n-51C97E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51C980 Ext File Attributes   00000000 (0)\n-51C984 Local Header Offset   000BA32A (762666)\n-51C988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51C988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51C9E3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51C9E5   Length              0005 (5)\n-51C9E7   Flags               01 (1) 'Modification'\n-51C9E8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51C9EC CENTRAL HEADER #289   02014B50 (33639248)\n-51C9F0 Created Zip Spec      14 (20) '2.0'\n-51C9F1 Created OS            00 (0) 'MS-DOS'\n-51C9F2 Extract Zip Spec      14 (20) '2.0'\n-51C9F3 Extract OS            00 (0) 'MS-DOS'\n-51C9F4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51C9F6 Compression Method    0000 (0) 'Stored'\n-51C9F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51C9FC CRC                   33231FD5 (857939925)\n-51CA00 Compressed Size       00001399 (5017)\n-51CA04 Uncompressed Size     00001399 (5017)\n-51CA08 Filename Length       0071 (113)\n-51CA0A Extra Length          0009 (9)\n-51CA0C Comment Length        0000 (0)\n-51CA0E Disk Start            0000 (0)\n-51CA10 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CA12 Ext File Attributes   00000000 (0)\n-51CA16 Local Header Offset   000BA3AC (762796)\n-51CA1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CA1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CA8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CA8D   Length              0005 (5)\n-51CA8F   Flags               01 (1) 'Modification'\n-51CA90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CA94 CENTRAL HEADER #290   02014B50 (33639248)\n-51CA98 Created Zip Spec      14 (20) '2.0'\n-51CA99 Created OS            00 (0) 'MS-DOS'\n-51CA9A Extract Zip Spec      14 (20) '2.0'\n-51CA9B Extract OS            00 (0) 'MS-DOS'\n-51CA9C General Purpose Flag  0000 (0)\n-51CA9E Compression Method    0000 (0) 'Stored'\n-51CAA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CAA4 CRC                   00000000 (0)\n-51CAA8 Compressed Size       00000000 (0)\n-51CAAC Uncompressed Size     00000000 (0)\n-51CAB0 Filename Length       0023 (35)\n-51CAB2 Extra Length          0009 (9)\n-51CAB4 Comment Length        0000 (0)\n-51CAB6 Disk Start            0000 (0)\n-51CAB8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CABA Ext File Attributes   00000000 (0)\n-51CABE Local Header Offset   000BB7ED (767981)\n-51CAC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CAC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CAE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CAE7   Length              0005 (5)\n-51CAE9   Flags               01 (1) 'Modification'\n-51CAEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CAEE CENTRAL HEADER #291   02014B50 (33639248)\n-51CAF2 Created Zip Spec      14 (20) '2.0'\n-51CAF3 Created OS            00 (0) 'MS-DOS'\n-51CAF4 Extract Zip Spec      14 (20) '2.0'\n-51CAF5 Extract OS            00 (0) 'MS-DOS'\n-51CAF6 General Purpose Flag  0000 (0)\n-51CAF8 Compression Method    0000 (0) 'Stored'\n-51CAFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CAFE CRC                   00000000 (0)\n-51CB02 Compressed Size       00000000 (0)\n-51CB06 Uncompressed Size     00000000 (0)\n-51CB0A Filename Length       002C (44)\n-51CB0C Extra Length          0009 (9)\n-51CB0E Comment Length        0000 (0)\n-51CB10 Disk Start            0000 (0)\n-51CB12 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CB14 Ext File Attributes   00000000 (0)\n-51CB18 Local Header Offset   000BB837 (768055)\n-51CB1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CB1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CB48 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CB4A   Length              0005 (5)\n-51CB4C   Flags               01 (1) 'Modification'\n-51CB4D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CB51 CENTRAL HEADER #292   02014B50 (33639248)\n-51CB55 Created Zip Spec      14 (20) '2.0'\n-51CB56 Created OS            00 (0) 'MS-DOS'\n-51CB57 Extract Zip Spec      14 (20) '2.0'\n-51CB58 Extract OS            00 (0) 'MS-DOS'\n-51CB59 General Purpose Flag  0000 (0)\n-51CB5B Compression Method    0000 (0) 'Stored'\n-51CB5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CB61 CRC                   00000000 (0)\n-51CB65 Compressed Size       00000000 (0)\n-51CB69 Uncompressed Size     00000000 (0)\n-51CB6D Filename Length       0054 (84)\n-51CB6F Extra Length          0009 (9)\n-51CB71 Comment Length        0000 (0)\n-51CB73 Disk Start            0000 (0)\n-51CB75 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CB77 Ext File Attributes   00000000 (0)\n-51CB7B Local Header Offset   000BB88A (768138)\n-51CB7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CB7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CBD3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CBD5   Length              0005 (5)\n-51CBD7   Flags               01 (1) 'Modification'\n-51CBD8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CBDC CENTRAL HEADER #293   02014B50 (33639248)\n-51CBE0 Created Zip Spec      14 (20) '2.0'\n-51CBE1 Created OS            00 (0) 'MS-DOS'\n-51CBE2 Extract Zip Spec      14 (20) '2.0'\n-51CBE3 Extract OS            00 (0) 'MS-DOS'\n-51CBE4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51CBE6 Compression Method    0000 (0) 'Stored'\n-51CBE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CBEC CRC                   63C353AF (1673745327)\n-51CBF0 Compressed Size       00000CF8 (3320)\n-51CBF4 Uncompressed Size     00000CF8 (3320)\n-51CBF8 Filename Length       006A (106)\n-51CBFA Extra Length          0009 (9)\n-51CBFC Comment Length        0000 (0)\n-51CBFE Disk Start            0000 (0)\n-51CC00 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CC02 Ext File Attributes   00000000 (0)\n-51CC06 Local Header Offset   000BB905 (768261)\n-51CC0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CC0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CC74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CC76   Length              0005 (5)\n-51CC78   Flags               01 (1) 'Modification'\n-51CC79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CC7D CENTRAL HEADER #294   02014B50 (33639248)\n-51CC81 Created Zip Spec      14 (20) '2.0'\n-51CC82 Created OS            00 (0) 'MS-DOS'\n-51CC83 Extract Zip Spec      14 (20) '2.0'\n-51CC84 Extract OS            00 (0) 'MS-DOS'\n-51CC85 General Purpose Flag  0000 (0)\n-51CC87 Compression Method    0000 (0) 'Stored'\n-51CC89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CC8D CRC                   00000000 (0)\n-51CC91 Compressed Size       00000000 (0)\n-51CC95 Uncompressed Size     00000000 (0)\n-51CC99 Filename Length       005B (91)\n-51CC9B Extra Length          0009 (9)\n-51CC9D Comment Length        0000 (0)\n-51CC9F Disk Start            0000 (0)\n-51CCA1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CCA3 Ext File Attributes   00000000 (0)\n-51CCA7 Local Header Offset   000BC69E (771742)\n-51CCAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CCAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CD06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CD08   Length              0005 (5)\n-51CD0A   Flags               01 (1) 'Modification'\n-51CD0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CD0F CENTRAL HEADER #295   02014B50 (33639248)\n-51CD13 Created Zip Spec      14 (20) '2.0'\n-51CD14 Created OS            00 (0) 'MS-DOS'\n-51CD15 Extract Zip Spec      14 (20) '2.0'\n-51CD16 Extract OS            00 (0) 'MS-DOS'\n-51CD17 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51CD19 Compression Method    0000 (0) 'Stored'\n-51CD1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CD1F CRC                   C64481A5 (3326378405)\n-51CD23 Compressed Size       00000723 (1827)\n-51CD27 Uncompressed Size     00000723 (1827)\n-51CD2B Filename Length       0071 (113)\n-51CD2D Extra Length          0009 (9)\n-51CD2F Comment Length        0000 (0)\n-51CD31 Disk Start            0000 (0)\n-51CD33 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CD35 Ext File Attributes   00000000 (0)\n-51CD39 Local Header Offset   000BC720 (771872)\n-51CD3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CD3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CDAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CDB0   Length              0005 (5)\n-51CDB2   Flags               01 (1) 'Modification'\n-51CDB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CDB7 CENTRAL HEADER #296   02014B50 (33639248)\n-51CDBB Created Zip Spec      14 (20) '2.0'\n-51CDBC Created OS            00 (0) 'MS-DOS'\n-51CDBD Extract Zip Spec      14 (20) '2.0'\n-51CDBE Extract OS            00 (0) 'MS-DOS'\n-51CDBF General Purpose Flag  0000 (0)\n-51CDC1 Compression Method    0000 (0) 'Stored'\n-51CDC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CDC7 CRC                   00000000 (0)\n-51CDCB Compressed Size       00000000 (0)\n-51CDCF Uncompressed Size     00000000 (0)\n-51CDD3 Filename Length       0059 (89)\n-51CDD5 Extra Length          0009 (9)\n-51CDD7 Comment Length        0000 (0)\n-51CDD9 Disk Start            0000 (0)\n-51CDDB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CDDD Ext File Attributes   00000000 (0)\n-51CDE1 Local Header Offset   000BCEEB (773867)\n-51CDE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CDE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CE3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CE40   Length              0005 (5)\n-51CE42   Flags               01 (1) 'Modification'\n-51CE43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CE47 CENTRAL HEADER #297   02014B50 (33639248)\n-51CE4B Created Zip Spec      14 (20) '2.0'\n-51CE4C Created OS            00 (0) 'MS-DOS'\n-51CE4D Extract Zip Spec      14 (20) '2.0'\n-51CE4E Extract OS            00 (0) 'MS-DOS'\n-51CE4F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51CE51 Compression Method    0000 (0) 'Stored'\n-51CE53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CE57 CRC                   39649106 (962892038)\n-51CE5B Compressed Size       000006E2 (1762)\n-51CE5F Uncompressed Size     000006E2 (1762)\n-51CE63 Filename Length       006F (111)\n-51CE65 Extra Length          0009 (9)\n-51CE67 Comment Length        0000 (0)\n-51CE69 Disk Start            0000 (0)\n-51CE6B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CE6D Ext File Attributes   00000000 (0)\n-51CE71 Local Header Offset   000BCF6B (773995)\n-51CE75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CE75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CEE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CEE6   Length              0005 (5)\n-51CEE8   Flags               01 (1) 'Modification'\n-51CEE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CEED CENTRAL HEADER #298   02014B50 (33639248)\n-51CEF1 Created Zip Spec      14 (20) '2.0'\n-51CEF2 Created OS            00 (0) 'MS-DOS'\n-51CEF3 Extract Zip Spec      14 (20) '2.0'\n-51CEF4 Extract OS            00 (0) 'MS-DOS'\n-51CEF5 General Purpose Flag  0000 (0)\n-51CEF7 Compression Method    0000 (0) 'Stored'\n-51CEF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CEFD CRC                   00000000 (0)\n-51CF01 Compressed Size       00000000 (0)\n-51CF05 Uncompressed Size     00000000 (0)\n-51CF09 Filename Length       0054 (84)\n-51CF0B Extra Length          0009 (9)\n-51CF0D Comment Length        0000 (0)\n-51CF0F Disk Start            0000 (0)\n-51CF11 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CF13 Ext File Attributes   00000000 (0)\n-51CF17 Local Header Offset   000BD6F3 (775923)\n-51CF1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CF1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51CF6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51CF71   Length              0005 (5)\n-51CF73   Flags               01 (1) 'Modification'\n-51CF74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51CF78 CENTRAL HEADER #299   02014B50 (33639248)\n-51CF7C Created Zip Spec      14 (20) '2.0'\n-51CF7D Created OS            00 (0) 'MS-DOS'\n-51CF7E Extract Zip Spec      14 (20) '2.0'\n-51CF7F Extract OS            00 (0) 'MS-DOS'\n-51CF80 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51CF82 Compression Method    0000 (0) 'Stored'\n-51CF84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51CF88 CRC                   8DC8B44C (2378740812)\n-51CF8C Compressed Size       00000782 (1922)\n-51CF90 Uncompressed Size     00000782 (1922)\n-51CF94 Filename Length       006A (106)\n-51CF96 Extra Length          0009 (9)\n-51CF98 Comment Length        0000 (0)\n-51CF9A Disk Start            0000 (0)\n-51CF9C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51CF9E Ext File Attributes   00000000 (0)\n-51CFA2 Local Header Offset   000BD76E (776046)\n-51CFA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51CFA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D010 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D012   Length              0005 (5)\n-51D014   Flags               01 (1) 'Modification'\n-51D015   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D019 CENTRAL HEADER #300   02014B50 (33639248)\n-51D01D Created Zip Spec      14 (20) '2.0'\n-51D01E Created OS            00 (0) 'MS-DOS'\n-51D01F Extract Zip Spec      14 (20) '2.0'\n-51D020 Extract OS            00 (0) 'MS-DOS'\n-51D021 General Purpose Flag  0000 (0)\n-51D023 Compression Method    0000 (0) 'Stored'\n-51D025 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D029 CRC                   00000000 (0)\n-51D02D Compressed Size       00000000 (0)\n-51D031 Uncompressed Size     00000000 (0)\n-51D035 Filename Length       0025 (37)\n-51D037 Extra Length          0009 (9)\n-51D039 Comment Length        0000 (0)\n-51D03B Disk Start            0000 (0)\n-51D03D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D03F Ext File Attributes   00000000 (0)\n-51D043 Local Header Offset   000BDF91 (778129)\n-51D047 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D047: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D06C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D06E   Length              0005 (5)\n-51D070   Flags               01 (1) 'Modification'\n-51D071   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D075 CENTRAL HEADER #301   02014B50 (33639248)\n-51D079 Created Zip Spec      14 (20) '2.0'\n-51D07A Created OS            00 (0) 'MS-DOS'\n-51D07B Extract Zip Spec      14 (20) '2.0'\n-51D07C Extract OS            00 (0) 'MS-DOS'\n-51D07D General Purpose Flag  0000 (0)\n-51D07F Compression Method    0000 (0) 'Stored'\n-51D081 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D085 CRC                   00000000 (0)\n-51D089 Compressed Size       00000000 (0)\n-51D08D Uncompressed Size     00000000 (0)\n-51D091 Filename Length       002E (46)\n-51D093 Extra Length          0009 (9)\n-51D095 Comment Length        0000 (0)\n-51D097 Disk Start            0000 (0)\n-51D099 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D09B Ext File Attributes   00000000 (0)\n-51D09F Local Header Offset   000BDFDD (778205)\n-51D0A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D0A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D0D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D0D3   Length              0005 (5)\n-51D0D5   Flags               01 (1) 'Modification'\n-51D0D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D0DA CENTRAL HEADER #302   02014B50 (33639248)\n-51D0DE Created Zip Spec      14 (20) '2.0'\n-51D0DF Created OS            00 (0) 'MS-DOS'\n-51D0E0 Extract Zip Spec      14 (20) '2.0'\n-51D0E1 Extract OS            00 (0) 'MS-DOS'\n-51D0E2 General Purpose Flag  0000 (0)\n-51D0E4 Compression Method    0000 (0) 'Stored'\n-51D0E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D0EA CRC                   00000000 (0)\n-51D0EE Compressed Size       00000000 (0)\n-51D0F2 Uncompressed Size     00000000 (0)\n-51D0F6 Filename Length       005E (94)\n-51D0F8 Extra Length          0009 (9)\n-51D0FA Comment Length        0000 (0)\n-51D0FC Disk Start            0000 (0)\n-51D0FE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D100 Ext File Attributes   00000000 (0)\n-51D104 Local Header Offset   000BE032 (778290)\n-51D108 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D108: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D166 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D168   Length              0005 (5)\n-51D16A   Flags               01 (1) 'Modification'\n-51D16B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D16F CENTRAL HEADER #303   02014B50 (33639248)\n-51D173 Created Zip Spec      14 (20) '2.0'\n-51D174 Created OS            00 (0) 'MS-DOS'\n-51D175 Extract Zip Spec      14 (20) '2.0'\n-51D176 Extract OS            00 (0) 'MS-DOS'\n-51D177 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D179 Compression Method    0000 (0) 'Stored'\n-51D17B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D17F CRC                   335CA1CD (861708749)\n-51D183 Compressed Size       00000E9A (3738)\n-51D187 Uncompressed Size     00000E9A (3738)\n-51D18B Filename Length       0074 (116)\n-51D18D Extra Length          0009 (9)\n-51D18F Comment Length        0000 (0)\n-51D191 Disk Start            0000 (0)\n-51D193 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D195 Ext File Attributes   00000000 (0)\n-51D199 Local Header Offset   000BE0B7 (778423)\n-51D19D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D19D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D211 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D213   Length              0005 (5)\n-51D215   Flags               01 (1) 'Modification'\n-51D216   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D21A CENTRAL HEADER #304   02014B50 (33639248)\n-51D21E Created Zip Spec      14 (20) '2.0'\n-51D21F Created OS            00 (0) 'MS-DOS'\n-51D220 Extract Zip Spec      14 (20) '2.0'\n-51D221 Extract OS            00 (0) 'MS-DOS'\n-51D222 General Purpose Flag  0000 (0)\n-51D224 Compression Method    0000 (0) 'Stored'\n-51D226 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D22A CRC                   00000000 (0)\n-51D22E Compressed Size       00000000 (0)\n-51D232 Uncompressed Size     00000000 (0)\n-51D236 Filename Length       006A (106)\n-51D238 Extra Length          0009 (9)\n-51D23A Comment Length        0000 (0)\n-51D23C Disk Start            0000 (0)\n-51D23E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D240 Ext File Attributes   00000000 (0)\n-51D244 Local Header Offset   000BEFFC (782332)\n-51D248 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D248: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D2B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D2B4   Length              0005 (5)\n-51D2B6   Flags               01 (1) 'Modification'\n-51D2B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D2BB CENTRAL HEADER #305   02014B50 (33639248)\n-51D2BF Created Zip Spec      14 (20) '2.0'\n-51D2C0 Created OS            00 (0) 'MS-DOS'\n-51D2C1 Extract Zip Spec      14 (20) '2.0'\n-51D2C2 Extract OS            00 (0) 'MS-DOS'\n-51D2C3 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D2C5 Compression Method    0000 (0) 'Stored'\n-51D2C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D2CB CRC                   3EE7FDDD (1055391197)\n-51D2CF Compressed Size       00001059 (4185)\n-51D2D3 Uncompressed Size     00001059 (4185)\n-51D2D7 Filename Length       0080 (128)\n-51D2D9 Extra Length          0009 (9)\n-51D2DB Comment Length        0000 (0)\n-51D2DD Disk Start            0000 (0)\n-51D2DF Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D2E1 Ext File Attributes   00000000 (0)\n-51D2E5 Local Header Offset   000BF08D (782477)\n-51D2E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D2E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D369 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D36B   Length              0005 (5)\n-51D36D   Flags               01 (1) 'Modification'\n-51D36E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D372 CENTRAL HEADER #306   02014B50 (33639248)\n-51D376 Created Zip Spec      14 (20) '2.0'\n-51D377 Created OS            00 (0) 'MS-DOS'\n-51D378 Extract Zip Spec      14 (20) '2.0'\n-51D379 Extract OS            00 (0) 'MS-DOS'\n-51D37A General Purpose Flag  0000 (0)\n-51D37C Compression Method    0000 (0) 'Stored'\n-51D37E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D382 CRC                   00000000 (0)\n-51D386 Compressed Size       00000000 (0)\n-51D38A Uncompressed Size     00000000 (0)\n-51D38E Filename Length       0027 (39)\n-51D390 Extra Length          0009 (9)\n-51D392 Comment Length        0000 (0)\n-51D394 Disk Start            0000 (0)\n-51D396 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D398 Ext File Attributes   00000000 (0)\n-51D39C Local Header Offset   000C019D (786845)\n-51D3A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D3A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D3C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D3C9   Length              0005 (5)\n-51D3CB   Flags               01 (1) 'Modification'\n-51D3CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D3D0 CENTRAL HEADER #307   02014B50 (33639248)\n-51D3D4 Created Zip Spec      14 (20) '2.0'\n-51D3D5 Created OS            00 (0) 'MS-DOS'\n-51D3D6 Extract Zip Spec      14 (20) '2.0'\n-51D3D7 Extract OS            00 (0) 'MS-DOS'\n-51D3D8 General Purpose Flag  0000 (0)\n-51D3DA Compression Method    0000 (0) 'Stored'\n-51D3DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D3E0 CRC                   00000000 (0)\n-51D3E4 Compressed Size       00000000 (0)\n-51D3E8 Uncompressed Size     00000000 (0)\n-51D3EC Filename Length       0030 (48)\n-51D3EE Extra Length          0009 (9)\n-51D3F0 Comment Length        0000 (0)\n-51D3F2 Disk Start            0000 (0)\n-51D3F4 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D3F6 Ext File Attributes   00000000 (0)\n-51D3FA Local Header Offset   000C01EB (786923)\n-51D3FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D3FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D42E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D430   Length              0005 (5)\n-51D432   Flags               01 (1) 'Modification'\n-51D433   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D437 CENTRAL HEADER #308   02014B50 (33639248)\n-51D43B Created Zip Spec      14 (20) '2.0'\n-51D43C Created OS            00 (0) 'MS-DOS'\n-51D43D Extract Zip Spec      14 (20) '2.0'\n-51D43E Extract OS            00 (0) 'MS-DOS'\n-51D43F General Purpose Flag  0000 (0)\n-51D441 Compression Method    0000 (0) 'Stored'\n-51D443 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D447 CRC                   00000000 (0)\n-51D44B Compressed Size       00000000 (0)\n-51D44F Uncompressed Size     00000000 (0)\n-51D453 Filename Length       0069 (105)\n-51D455 Extra Length          0009 (9)\n-51D457 Comment Length        0000 (0)\n-51D459 Disk Start            0000 (0)\n-51D45B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D45D Ext File Attributes   00000000 (0)\n-51D461 Local Header Offset   000C0242 (787010)\n-51D465 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D465: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D4CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D4D0   Length              0005 (5)\n-51D4D2   Flags               01 (1) 'Modification'\n-51D4D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D4D7 CENTRAL HEADER #309   02014B50 (33639248)\n-51D4DB Created Zip Spec      14 (20) '2.0'\n-51D4DC Created OS            00 (0) 'MS-DOS'\n-51D4DD Extract Zip Spec      14 (20) '2.0'\n-51D4DE Extract OS            00 (0) 'MS-DOS'\n-51D4DF General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D4E1 Compression Method    0000 (0) 'Stored'\n-51D4E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D4E7 CRC                   67FA3A91 (1744452241)\n-51D4EB Compressed Size       00000C5B (3163)\n-51D4EF Uncompressed Size     00000C5B (3163)\n-51D4F3 Filename Length       007F (127)\n-51D4F5 Extra Length          0009 (9)\n-51D4F7 Comment Length        0000 (0)\n-51D4F9 Disk Start            0000 (0)\n-51D4FB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D4FD Ext File Attributes   00000000 (0)\n-51D501 Local Header Offset   000C02D2 (787154)\n-51D505 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D505: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D584 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D586   Length              0005 (5)\n-51D588   Flags               01 (1) 'Modification'\n-51D589   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D58D CENTRAL HEADER #310   02014B50 (33639248)\n-51D591 Created Zip Spec      14 (20) '2.0'\n-51D592 Created OS            00 (0) 'MS-DOS'\n-51D593 Extract Zip Spec      14 (20) '2.0'\n-51D594 Extract OS            00 (0) 'MS-DOS'\n-51D595 General Purpose Flag  0000 (0)\n-51D597 Compression Method    0000 (0) 'Stored'\n-51D599 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D59D CRC                   00000000 (0)\n-51D5A1 Compressed Size       00000000 (0)\n-51D5A5 Uncompressed Size     00000000 (0)\n-51D5A9 Filename Length       0069 (105)\n-51D5AB Extra Length          0009 (9)\n-51D5AD Comment Length        0000 (0)\n-51D5AF Disk Start            0000 (0)\n-51D5B1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D5B3 Ext File Attributes   00000000 (0)\n-51D5B7 Local Header Offset   000C0FE3 (790499)\n-51D5BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D5BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D624 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D626   Length              0005 (5)\n-51D628   Flags               01 (1) 'Modification'\n-51D629   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D62D CENTRAL HEADER #311   02014B50 (33639248)\n-51D631 Created Zip Spec      14 (20) '2.0'\n-51D632 Created OS            00 (0) 'MS-DOS'\n-51D633 Extract Zip Spec      14 (20) '2.0'\n-51D634 Extract OS            00 (0) 'MS-DOS'\n-51D635 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D637 Compression Method    0000 (0) 'Stored'\n-51D639 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D63D CRC                   63513D5C (1666268508)\n-51D641 Compressed Size       000007C0 (1984)\n-51D645 Uncompressed Size     000007C0 (1984)\n-51D649 Filename Length       007F (127)\n-51D64B Extra Length          0009 (9)\n-51D64D Comment Length        0000 (0)\n-51D64F Disk Start            0000 (0)\n-51D651 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D653 Ext File Attributes   00000000 (0)\n-51D657 Local Header Offset   000C1073 (790643)\n-51D65B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D65B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D6DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D6DC   Length              0005 (5)\n-51D6DE   Flags               01 (1) 'Modification'\n-51D6DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D6E3 CENTRAL HEADER #312   02014B50 (33639248)\n-51D6E7 Created Zip Spec      14 (20) '2.0'\n-51D6E8 Created OS            00 (0) 'MS-DOS'\n-51D6E9 Extract Zip Spec      14 (20) '2.0'\n-51D6EA Extract OS            00 (0) 'MS-DOS'\n-51D6EB General Purpose Flag  0000 (0)\n-51D6ED Compression Method    0000 (0) 'Stored'\n-51D6EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D6F3 CRC                   00000000 (0)\n-51D6F7 Compressed Size       00000000 (0)\n-51D6FB Uncompressed Size     00000000 (0)\n-51D6FF Filename Length       0060 (96)\n-51D701 Extra Length          0009 (9)\n-51D703 Comment Length        0000 (0)\n-51D705 Disk Start            0000 (0)\n-51D707 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D709 Ext File Attributes   00000000 (0)\n-51D70D Local Header Offset   000C18E9 (792809)\n-51D711 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D711: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D771 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D773   Length              0005 (5)\n-51D775   Flags               01 (1) 'Modification'\n-51D776   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D77A CENTRAL HEADER #313   02014B50 (33639248)\n-51D77E Created Zip Spec      14 (20) '2.0'\n-51D77F Created OS            00 (0) 'MS-DOS'\n-51D780 Extract Zip Spec      14 (20) '2.0'\n-51D781 Extract OS            00 (0) 'MS-DOS'\n-51D782 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D784 Compression Method    0000 (0) 'Stored'\n-51D786 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D78A CRC                   99929518 (2576520472)\n-51D78E Compressed Size       00000EDA (3802)\n-51D792 Uncompressed Size     00000EDA (3802)\n-51D796 Filename Length       0076 (118)\n-51D798 Extra Length          0009 (9)\n-51D79A Comment Length        0000 (0)\n-51D79C Disk Start            0000 (0)\n-51D79E Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D7A0 Ext File Attributes   00000000 (0)\n-51D7A4 Local Header Offset   000C1970 (792944)\n-51D7A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D7A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D81E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D820   Length              0005 (5)\n-51D822   Flags               01 (1) 'Modification'\n-51D823   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D827 CENTRAL HEADER #314   02014B50 (33639248)\n-51D82B Created Zip Spec      14 (20) '2.0'\n-51D82C Created OS            00 (0) 'MS-DOS'\n-51D82D Extract Zip Spec      14 (20) '2.0'\n-51D82E Extract OS            00 (0) 'MS-DOS'\n-51D82F General Purpose Flag  0000 (0)\n-51D831 Compression Method    0000 (0) 'Stored'\n-51D833 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D837 CRC                   00000000 (0)\n-51D83B Compressed Size       00000000 (0)\n-51D83F Uncompressed Size     00000000 (0)\n-51D843 Filename Length       005E (94)\n-51D845 Extra Length          0009 (9)\n-51D847 Comment Length        0000 (0)\n-51D849 Disk Start            0000 (0)\n-51D84B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D84D Ext File Attributes   00000000 (0)\n-51D851 Local Header Offset   000C28F7 (796919)\n-51D855 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D855: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D8B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D8B5   Length              0005 (5)\n-51D8B7   Flags               01 (1) 'Modification'\n-51D8B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D8BC CENTRAL HEADER #315   02014B50 (33639248)\n-51D8C0 Created Zip Spec      14 (20) '2.0'\n-51D8C1 Created OS            00 (0) 'MS-DOS'\n-51D8C2 Extract Zip Spec      14 (20) '2.0'\n-51D8C3 Extract OS            00 (0) 'MS-DOS'\n-51D8C4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51D8C6 Compression Method    0000 (0) 'Stored'\n-51D8C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D8CC CRC                   E6BF62E0 (3871302368)\n-51D8D0 Compressed Size       000008F8 (2296)\n-51D8D4 Uncompressed Size     000008F8 (2296)\n-51D8D8 Filename Length       0074 (116)\n-51D8DA Extra Length          0009 (9)\n-51D8DC Comment Length        0000 (0)\n-51D8DE Disk Start            0000 (0)\n-51D8E0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D8E2 Ext File Attributes   00000000 (0)\n-51D8E6 Local Header Offset   000C297C (797052)\n-51D8EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D8EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D95E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D960   Length              0005 (5)\n-51D962   Flags               01 (1) 'Modification'\n-51D963   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51D967 CENTRAL HEADER #316   02014B50 (33639248)\n-51D96B Created Zip Spec      14 (20) '2.0'\n-51D96C Created OS            00 (0) 'MS-DOS'\n-51D96D Extract Zip Spec      14 (20) '2.0'\n-51D96E Extract OS            00 (0) 'MS-DOS'\n-51D96F General Purpose Flag  0000 (0)\n-51D971 Compression Method    0000 (0) 'Stored'\n-51D973 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51D977 CRC                   00000000 (0)\n-51D97B Compressed Size       00000000 (0)\n-51D97F Uncompressed Size     00000000 (0)\n-51D983 Filename Length       0065 (101)\n-51D985 Extra Length          0009 (9)\n-51D987 Comment Length        0000 (0)\n-51D989 Disk Start            0000 (0)\n-51D98B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51D98D Ext File Attributes   00000000 (0)\n-51D991 Local Header Offset   000C331F (799519)\n-51D995 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51D995: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51D9FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51D9FC   Length              0005 (5)\n-51D9FE   Flags               01 (1) 'Modification'\n-51D9FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DA03 CENTRAL HEADER #317   02014B50 (33639248)\n-51DA07 Created Zip Spec      14 (20) '2.0'\n-51DA08 Created OS            00 (0) 'MS-DOS'\n-51DA09 Extract Zip Spec      14 (20) '2.0'\n-51DA0A Extract OS            00 (0) 'MS-DOS'\n-51DA0B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51DA0D Compression Method    0000 (0) 'Stored'\n-51DA0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DA13 CRC                   F05E2331 (4032701233)\n-51DA17 Compressed Size       00000831 (2097)\n-51DA1B Uncompressed Size     00000831 (2097)\n-51DA1F Filename Length       007B (123)\n-51DA21 Extra Length          0009 (9)\n-51DA23 Comment Length        0000 (0)\n-51DA25 Disk Start            0000 (0)\n-51DA27 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DA29 Ext File Attributes   00000000 (0)\n-51DA2D Local Header Offset   000C33AB (799659)\n-51DA31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DA31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DAAC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DAAE   Length              0005 (5)\n-51DAB0   Flags               01 (1) 'Modification'\n-51DAB1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DAB5 CENTRAL HEADER #318   02014B50 (33639248)\n-51DAB9 Created Zip Spec      14 (20) '2.0'\n-51DABA Created OS            00 (0) 'MS-DOS'\n-51DABB Extract Zip Spec      14 (20) '2.0'\n-51DABC Extract OS            00 (0) 'MS-DOS'\n-51DABD General Purpose Flag  0000 (0)\n-51DABF Compression Method    0000 (0) 'Stored'\n-51DAC1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DAC5 CRC                   00000000 (0)\n-51DAC9 Compressed Size       00000000 (0)\n-51DACD Uncompressed Size     00000000 (0)\n-51DAD1 Filename Length       0063 (99)\n-51DAD3 Extra Length          0009 (9)\n-51DAD5 Comment Length        0000 (0)\n-51DAD7 Disk Start            0000 (0)\n-51DAD9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DADB Ext File Attributes   00000000 (0)\n-51DADF Local Header Offset   000C3C8E (801934)\n-51DAE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DAE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DB46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DB48   Length              0005 (5)\n-51DB4A   Flags               01 (1) 'Modification'\n-51DB4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DB4F CENTRAL HEADER #319   02014B50 (33639248)\n-51DB53 Created Zip Spec      14 (20) '2.0'\n-51DB54 Created OS            00 (0) 'MS-DOS'\n-51DB55 Extract Zip Spec      14 (20) '2.0'\n-51DB56 Extract OS            00 (0) 'MS-DOS'\n-51DB57 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51DB59 Compression Method    0000 (0) 'Stored'\n-51DB5B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DB5F CRC                   80ED3BA4 (2163030948)\n-51DB63 Compressed Size       000015D0 (5584)\n-51DB67 Uncompressed Size     000015D0 (5584)\n-51DB6B Filename Length       0079 (121)\n-51DB6D Extra Length          0009 (9)\n-51DB6F Comment Length        0000 (0)\n-51DB71 Disk Start            0000 (0)\n-51DB73 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DB75 Ext File Attributes   00000000 (0)\n-51DB79 Local Header Offset   000C3D18 (802072)\n-51DB7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DB7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DBF6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DBF8   Length              0005 (5)\n-51DBFA   Flags               01 (1) 'Modification'\n-51DBFB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DBFF CENTRAL HEADER #320   02014B50 (33639248)\n-51DC03 Created Zip Spec      14 (20) '2.0'\n-51DC04 Created OS            00 (0) 'MS-DOS'\n-51DC05 Extract Zip Spec      14 (20) '2.0'\n-51DC06 Extract OS            00 (0) 'MS-DOS'\n-51DC07 General Purpose Flag  0000 (0)\n-51DC09 Compression Method    0000 (0) 'Stored'\n-51DC0B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DC0F CRC                   00000000 (0)\n-51DC13 Compressed Size       00000000 (0)\n-51DC17 Uncompressed Size     00000000 (0)\n-51DC1B Filename Length       0069 (105)\n-51DC1D Extra Length          0009 (9)\n-51DC1F Comment Length        0000 (0)\n-51DC21 Disk Start            0000 (0)\n-51DC23 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DC25 Ext File Attributes   00000000 (0)\n-51DC29 Local Header Offset   000C5398 (807832)\n-51DC2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DC2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DC96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DC98   Length              0005 (5)\n-51DC9A   Flags               01 (1) 'Modification'\n-51DC9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DC9F CENTRAL HEADER #321   02014B50 (33639248)\n-51DCA3 Created Zip Spec      14 (20) '2.0'\n-51DCA4 Created OS            00 (0) 'MS-DOS'\n-51DCA5 Extract Zip Spec      14 (20) '2.0'\n-51DCA6 Extract OS            00 (0) 'MS-DOS'\n-51DCA7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51DCA9 Compression Method    0000 (0) 'Stored'\n-51DCAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DCAF CRC                   7018E446 (1880679494)\n-51DCB3 Compressed Size       00001FAE (8110)\n-51DCB7 Uncompressed Size     00001FAE (8110)\n-51DCBB Filename Length       007F (127)\n-51DCBD Extra Length          0009 (9)\n-51DCBF Comment Length        0000 (0)\n-51DCC1 Disk Start            0000 (0)\n-51DCC3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DCC5 Ext File Attributes   00000000 (0)\n-51DCC9 Local Header Offset   000C5428 (807976)\n-51DCCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DCCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DD4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DD4E   Length              0005 (5)\n-51DD50   Flags               01 (1) 'Modification'\n-51DD51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DD55 CENTRAL HEADER #322   02014B50 (33639248)\n-51DD59 Created Zip Spec      14 (20) '2.0'\n-51DD5A Created OS            00 (0) 'MS-DOS'\n-51DD5B Extract Zip Spec      14 (20) '2.0'\n-51DD5C Extract OS            00 (0) 'MS-DOS'\n-51DD5D General Purpose Flag  0000 (0)\n-51DD5F Compression Method    0000 (0) 'Stored'\n-51DD61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DD65 CRC                   00000000 (0)\n-51DD69 Compressed Size       00000000 (0)\n-51DD6D Uncompressed Size     00000000 (0)\n-51DD71 Filename Length       0060 (96)\n-51DD73 Extra Length          0009 (9)\n-51DD75 Comment Length        0000 (0)\n-51DD77 Disk Start            0000 (0)\n-51DD79 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DD7B Ext File Attributes   00000000 (0)\n-51DD7F Local Header Offset   000C748C (816268)\n-51DD83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DD83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DDE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DDE5   Length              0005 (5)\n-51DDE7   Flags               01 (1) 'Modification'\n-51DDE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DDEC CENTRAL HEADER #323   02014B50 (33639248)\n-51DDF0 Created Zip Spec      14 (20) '2.0'\n-51DDF1 Created OS            00 (0) 'MS-DOS'\n-51DDF2 Extract Zip Spec      14 (20) '2.0'\n-51DDF3 Extract OS            00 (0) 'MS-DOS'\n-51DDF4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51DDF6 Compression Method    0000 (0) 'Stored'\n-51DDF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DDFC CRC                   61A0CE5A (1637928538)\n-51DE00 Compressed Size       000012FA (4858)\n-51DE04 Uncompressed Size     000012FA (4858)\n-51DE08 Filename Length       0076 (118)\n-51DE0A Extra Length          0009 (9)\n-51DE0C Comment Length        0000 (0)\n-51DE0E Disk Start            0000 (0)\n-51DE10 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DE12 Ext File Attributes   00000000 (0)\n-51DE16 Local Header Offset   000C7513 (816403)\n-51DE1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DE1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DE90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DE92   Length              0005 (5)\n-51DE94   Flags               01 (1) 'Modification'\n-51DE95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DE99 CENTRAL HEADER #324   02014B50 (33639248)\n-51DE9D Created Zip Spec      14 (20) '2.0'\n-51DE9E Created OS            00 (0) 'MS-DOS'\n-51DE9F Extract Zip Spec      14 (20) '2.0'\n-51DEA0 Extract OS            00 (0) 'MS-DOS'\n-51DEA1 General Purpose Flag  0000 (0)\n-51DEA3 Compression Method    0000 (0) 'Stored'\n-51DEA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DEA9 CRC                   00000000 (0)\n-51DEAD Compressed Size       00000000 (0)\n-51DEB1 Uncompressed Size     00000000 (0)\n-51DEB5 Filename Length       0063 (99)\n-51DEB7 Extra Length          0009 (9)\n-51DEB9 Comment Length        0000 (0)\n-51DEBB Disk Start            0000 (0)\n-51DEBD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DEBF Ext File Attributes   00000000 (0)\n-51DEC3 Local Header Offset   000C88BA (821434)\n-51DEC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DEC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DF2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DF2C   Length              0005 (5)\n-51DF2E   Flags               01 (1) 'Modification'\n-51DF2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DF33 CENTRAL HEADER #325   02014B50 (33639248)\n-51DF37 Created Zip Spec      14 (20) '2.0'\n-51DF38 Created OS            00 (0) 'MS-DOS'\n-51DF39 Extract Zip Spec      14 (20) '2.0'\n-51DF3A Extract OS            00 (0) 'MS-DOS'\n-51DF3B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51DF3D Compression Method    0000 (0) 'Stored'\n-51DF3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DF43 CRC                   5A804AEF (1518357231)\n-51DF47 Compressed Size       00001311 (4881)\n-51DF4B Uncompressed Size     00001311 (4881)\n-51DF4F Filename Length       0079 (121)\n-51DF51 Extra Length          0009 (9)\n-51DF53 Comment Length        0000 (0)\n-51DF55 Disk Start            0000 (0)\n-51DF57 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51DF59 Ext File Attributes   00000000 (0)\n-51DF5D Local Header Offset   000C8944 (821572)\n-51DF61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51DF61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51DFDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51DFDC   Length              0005 (5)\n-51DFDE   Flags               01 (1) 'Modification'\n-51DFDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51DFE3 CENTRAL HEADER #326   02014B50 (33639248)\n-51DFE7 Created Zip Spec      14 (20) '2.0'\n-51DFE8 Created OS            00 (0) 'MS-DOS'\n-51DFE9 Extract Zip Spec      14 (20) '2.0'\n-51DFEA Extract OS            00 (0) 'MS-DOS'\n-51DFEB General Purpose Flag  0000 (0)\n-51DFED Compression Method    0000 (0) 'Stored'\n-51DFEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51DFF3 CRC                   00000000 (0)\n-51DFF7 Compressed Size       00000000 (0)\n-51DFFB Uncompressed Size     00000000 (0)\n-51DFFF Filename Length       005F (95)\n-51E001 Extra Length          0009 (9)\n-51E003 Comment Length        0000 (0)\n-51E005 Disk Start            0000 (0)\n-51E007 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E009 Ext File Attributes   00000000 (0)\n-51E00D Local Header Offset   000C9D05 (826629)\n-51E011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E070 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E072   Length              0005 (5)\n-51E074   Flags               01 (1) 'Modification'\n-51E075   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E079 CENTRAL HEADER #327   02014B50 (33639248)\n-51E07D Created Zip Spec      14 (20) '2.0'\n-51E07E Created OS            00 (0) 'MS-DOS'\n-51E07F Extract Zip Spec      14 (20) '2.0'\n-51E080 Extract OS            00 (0) 'MS-DOS'\n-51E081 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E083 Compression Method    0000 (0) 'Stored'\n-51E085 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E089 CRC                   F4A07CA3 (4104158371)\n-51E08D Compressed Size       000027E4 (10212)\n-51E091 Uncompressed Size     000027E4 (10212)\n-51E095 Filename Length       0075 (117)\n-51E097 Extra Length          0009 (9)\n-51E099 Comment Length        0000 (0)\n-51E09B Disk Start            0000 (0)\n-51E09D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E09F Ext File Attributes   00000000 (0)\n-51E0A3 Local Header Offset   000C9D8B (826763)\n-51E0A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E0A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E11C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E11E   Length              0005 (5)\n-51E120   Flags               01 (1) 'Modification'\n-51E121   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E125 CENTRAL HEADER #328   02014B50 (33639248)\n-51E129 Created Zip Spec      14 (20) '2.0'\n-51E12A Created OS            00 (0) 'MS-DOS'\n-51E12B Extract Zip Spec      14 (20) '2.0'\n-51E12C Extract OS            00 (0) 'MS-DOS'\n-51E12D General Purpose Flag  0000 (0)\n-51E12F Compression Method    0000 (0) 'Stored'\n-51E131 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E135 CRC                   00000000 (0)\n-51E139 Compressed Size       00000000 (0)\n-51E13D Uncompressed Size     00000000 (0)\n-51E141 Filename Length       0067 (103)\n-51E143 Extra Length          0009 (9)\n-51E145 Comment Length        0000 (0)\n-51E147 Disk Start            0000 (0)\n-51E149 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E14B Ext File Attributes   00000000 (0)\n-51E14F Local Header Offset   000CC61B (837147)\n-51E153 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E153: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E1BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E1BC   Length              0005 (5)\n-51E1BE   Flags               01 (1) 'Modification'\n-51E1BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E1C3 CENTRAL HEADER #329   02014B50 (33639248)\n-51E1C7 Created Zip Spec      14 (20) '2.0'\n-51E1C8 Created OS            00 (0) 'MS-DOS'\n-51E1C9 Extract Zip Spec      14 (20) '2.0'\n-51E1CA Extract OS            00 (0) 'MS-DOS'\n-51E1CB General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E1CD Compression Method    0000 (0) 'Stored'\n-51E1CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E1D3 CRC                   6E031E40 (1845698112)\n-51E1D7 Compressed Size       00001276 (4726)\n-51E1DB Uncompressed Size     00001276 (4726)\n-51E1DF Filename Length       007D (125)\n-51E1E1 Extra Length          0009 (9)\n-51E1E3 Comment Length        0000 (0)\n-51E1E5 Disk Start            0000 (0)\n-51E1E7 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E1E9 Ext File Attributes   00000000 (0)\n-51E1ED Local Header Offset   000CC6A9 (837289)\n-51E1F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E1F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E26E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E270   Length              0005 (5)\n-51E272   Flags               01 (1) 'Modification'\n-51E273   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E277 CENTRAL HEADER #330   02014B50 (33639248)\n-51E27B Created Zip Spec      14 (20) '2.0'\n-51E27C Created OS            00 (0) 'MS-DOS'\n-51E27D Extract Zip Spec      14 (20) '2.0'\n-51E27E Extract OS            00 (0) 'MS-DOS'\n-51E27F General Purpose Flag  0000 (0)\n-51E281 Compression Method    0000 (0) 'Stored'\n-51E283 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E287 CRC                   00000000 (0)\n-51E28B Compressed Size       00000000 (0)\n-51E28F Uncompressed Size     00000000 (0)\n-51E293 Filename Length       0066 (102)\n-51E295 Extra Length          0009 (9)\n-51E297 Comment Length        0000 (0)\n-51E299 Disk Start            0000 (0)\n-51E29B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E29D Ext File Attributes   00000000 (0)\n-51E2A1 Local Header Offset   000CD9D3 (842195)\n-51E2A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E2A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E30B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E30D   Length              0005 (5)\n-51E30F   Flags               01 (1) 'Modification'\n-51E310   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E314 CENTRAL HEADER #331   02014B50 (33639248)\n-51E318 Created Zip Spec      14 (20) '2.0'\n-51E319 Created OS            00 (0) 'MS-DOS'\n-51E31A Extract Zip Spec      14 (20) '2.0'\n-51E31B Extract OS            00 (0) 'MS-DOS'\n-51E31C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E31E Compression Method    0000 (0) 'Stored'\n-51E320 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E324 CRC                   5987930A (1502057226)\n-51E328 Compressed Size       00000BDE (3038)\n-51E32C Uncompressed Size     00000BDE (3038)\n-51E330 Filename Length       007C (124)\n-51E332 Extra Length          0009 (9)\n-51E334 Comment Length        0000 (0)\n-51E336 Disk Start            0000 (0)\n-51E338 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E33A Ext File Attributes   00000000 (0)\n-51E33E Local Header Offset   000CDA60 (842336)\n-51E342 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E342: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E3BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E3C0   Length              0005 (5)\n-51E3C2   Flags               01 (1) 'Modification'\n-51E3C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E3C7 CENTRAL HEADER #332   02014B50 (33639248)\n-51E3CB Created Zip Spec      14 (20) '2.0'\n-51E3CC Created OS            00 (0) 'MS-DOS'\n-51E3CD Extract Zip Spec      14 (20) '2.0'\n-51E3CE Extract OS            00 (0) 'MS-DOS'\n-51E3CF General Purpose Flag  0000 (0)\n-51E3D1 Compression Method    0000 (0) 'Stored'\n-51E3D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E3D7 CRC                   00000000 (0)\n-51E3DB Compressed Size       00000000 (0)\n-51E3DF Uncompressed Size     00000000 (0)\n-51E3E3 Filename Length       0067 (103)\n-51E3E5 Extra Length          0009 (9)\n-51E3E7 Comment Length        0000 (0)\n-51E3E9 Disk Start            0000 (0)\n-51E3EB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E3ED Ext File Attributes   00000000 (0)\n-51E3F1 Local Header Offset   000CE6F1 (845553)\n-51E3F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E3F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E45C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E45E   Length              0005 (5)\n-51E460   Flags               01 (1) 'Modification'\n-51E461   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E465 CENTRAL HEADER #333   02014B50 (33639248)\n-51E469 Created Zip Spec      14 (20) '2.0'\n-51E46A Created OS            00 (0) 'MS-DOS'\n-51E46B Extract Zip Spec      14 (20) '2.0'\n-51E46C Extract OS            00 (0) 'MS-DOS'\n-51E46D General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E46F Compression Method    0000 (0) 'Stored'\n-51E471 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E475 CRC                   CA93F7B9 (3398694841)\n-51E479 Compressed Size       000008CF (2255)\n-51E47D Uncompressed Size     000008CF (2255)\n-51E481 Filename Length       007D (125)\n-51E483 Extra Length          0009 (9)\n-51E485 Comment Length        0000 (0)\n-51E487 Disk Start            0000 (0)\n-51E489 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E48B Ext File Attributes   00000000 (0)\n-51E48F Local Header Offset   000CE77F (845695)\n-51E493 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E493: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E510 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E512   Length              0005 (5)\n-51E514   Flags               01 (1) 'Modification'\n-51E515   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E519 CENTRAL HEADER #334   02014B50 (33639248)\n-51E51D Created Zip Spec      14 (20) '2.0'\n-51E51E Created OS            00 (0) 'MS-DOS'\n-51E51F Extract Zip Spec      14 (20) '2.0'\n-51E520 Extract OS            00 (0) 'MS-DOS'\n-51E521 General Purpose Flag  0000 (0)\n-51E523 Compression Method    0000 (0) 'Stored'\n-51E525 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E529 CRC                   00000000 (0)\n-51E52D Compressed Size       00000000 (0)\n-51E531 Uncompressed Size     00000000 (0)\n-51E535 Filename Length       0065 (101)\n-51E537 Extra Length          0009 (9)\n-51E539 Comment Length        0000 (0)\n-51E53B Disk Start            0000 (0)\n-51E53D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E53F Ext File Attributes   00000000 (0)\n-51E543 Local Header Offset   000CF102 (848130)\n-51E547 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E547: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E5AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E5AE   Length              0005 (5)\n-51E5B0   Flags               01 (1) 'Modification'\n-51E5B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E5B5 CENTRAL HEADER #335   02014B50 (33639248)\n-51E5B9 Created Zip Spec      14 (20) '2.0'\n-51E5BA Created OS            00 (0) 'MS-DOS'\n-51E5BB Extract Zip Spec      14 (20) '2.0'\n-51E5BC Extract OS            00 (0) 'MS-DOS'\n-51E5BD General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E5BF Compression Method    0000 (0) 'Stored'\n-51E5C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E5C5 CRC                   673E5975 (1732139381)\n-51E5C9 Compressed Size       00000CA9 (3241)\n-51E5CD Uncompressed Size     00000CA9 (3241)\n-51E5D1 Filename Length       007B (123)\n-51E5D3 Extra Length          0009 (9)\n-51E5D5 Comment Length        0000 (0)\n-51E5D7 Disk Start            0000 (0)\n-51E5D9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E5DB Ext File Attributes   00000000 (0)\n-51E5DF Local Header Offset   000CF18E (848270)\n-51E5E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E5E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E65E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E660   Length              0005 (5)\n-51E662   Flags               01 (1) 'Modification'\n-51E663   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E667 CENTRAL HEADER #336   02014B50 (33639248)\n-51E66B Created Zip Spec      14 (20) '2.0'\n-51E66C Created OS            00 (0) 'MS-DOS'\n-51E66D Extract Zip Spec      14 (20) '2.0'\n-51E66E Extract OS            00 (0) 'MS-DOS'\n-51E66F General Purpose Flag  0000 (0)\n-51E671 Compression Method    0000 (0) 'Stored'\n-51E673 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E677 CRC                   00000000 (0)\n-51E67B Compressed Size       00000000 (0)\n-51E67F Uncompressed Size     00000000 (0)\n-51E683 Filename Length       0063 (99)\n-51E685 Extra Length          0009 (9)\n-51E687 Comment Length        0000 (0)\n-51E689 Disk Start            0000 (0)\n-51E68B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E68D Ext File Attributes   00000000 (0)\n-51E691 Local Header Offset   000CFEE9 (851689)\n-51E695 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E695: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E6F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E6FA   Length              0005 (5)\n-51E6FC   Flags               01 (1) 'Modification'\n-51E6FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E701 CENTRAL HEADER #337   02014B50 (33639248)\n-51E705 Created Zip Spec      14 (20) '2.0'\n-51E706 Created OS            00 (0) 'MS-DOS'\n-51E707 Extract Zip Spec      14 (20) '2.0'\n-51E708 Extract OS            00 (0) 'MS-DOS'\n-51E709 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E70B Compression Method    0000 (0) 'Stored'\n-51E70D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E711 CRC                   2D1E752C (756970796)\n-51E715 Compressed Size       00005038 (20536)\n-51E719 Uncompressed Size     00005038 (20536)\n-51E71D Filename Length       0079 (121)\n-51E71F Extra Length          0009 (9)\n-51E721 Comment Length        0000 (0)\n-51E723 Disk Start            0000 (0)\n-51E725 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E727 Ext File Attributes   00000000 (0)\n-51E72B Local Header Offset   000CFF73 (851827)\n-51E72F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E72F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E7A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E7AA   Length              0005 (5)\n-51E7AC   Flags               01 (1) 'Modification'\n-51E7AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E7B1 CENTRAL HEADER #338   02014B50 (33639248)\n-51E7B5 Created Zip Spec      14 (20) '2.0'\n-51E7B6 Created OS            00 (0) 'MS-DOS'\n-51E7B7 Extract Zip Spec      14 (20) '2.0'\n-51E7B8 Extract OS            00 (0) 'MS-DOS'\n-51E7B9 General Purpose Flag  0000 (0)\n-51E7BB Compression Method    0000 (0) 'Stored'\n-51E7BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E7C1 CRC                   00000000 (0)\n-51E7C5 Compressed Size       00000000 (0)\n-51E7C9 Uncompressed Size     00000000 (0)\n-51E7CD Filename Length       005C (92)\n-51E7CF Extra Length          0009 (9)\n-51E7D1 Comment Length        0000 (0)\n-51E7D3 Disk Start            0000 (0)\n-51E7D5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E7D7 Ext File Attributes   00000000 (0)\n-51E7DB Local Header Offset   000D505B (872539)\n-51E7DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E7DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E83B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E83D   Length              0005 (5)\n-51E83F   Flags               01 (1) 'Modification'\n-51E840   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E844 CENTRAL HEADER #339   02014B50 (33639248)\n-51E848 Created Zip Spec      14 (20) '2.0'\n-51E849 Created OS            00 (0) 'MS-DOS'\n-51E84A Extract Zip Spec      14 (20) '2.0'\n-51E84B Extract OS            00 (0) 'MS-DOS'\n-51E84C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E84E Compression Method    0000 (0) 'Stored'\n-51E850 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E854 CRC                   DB187B38 (3675814712)\n-51E858 Compressed Size       00001A85 (6789)\n-51E85C Uncompressed Size     00001A85 (6789)\n-51E860 Filename Length       0072 (114)\n-51E862 Extra Length          0009 (9)\n-51E864 Comment Length        0000 (0)\n-51E866 Disk Start            0000 (0)\n-51E868 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E86A Ext File Attributes   00000000 (0)\n-51E86E Local Header Offset   000D50DE (872670)\n-51E872 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E872: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E8E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E8E6   Length              0005 (5)\n-51E8E8   Flags               01 (1) 'Modification'\n-51E8E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E8ED CENTRAL HEADER #340   02014B50 (33639248)\n-51E8F1 Created Zip Spec      14 (20) '2.0'\n-51E8F2 Created OS            00 (0) 'MS-DOS'\n-51E8F3 Extract Zip Spec      14 (20) '2.0'\n-51E8F4 Extract OS            00 (0) 'MS-DOS'\n-51E8F5 General Purpose Flag  0000 (0)\n-51E8F7 Compression Method    0000 (0) 'Stored'\n-51E8F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E8FD CRC                   00000000 (0)\n-51E901 Compressed Size       00000000 (0)\n-51E905 Uncompressed Size     00000000 (0)\n-51E909 Filename Length       005D (93)\n-51E90B Extra Length          0009 (9)\n-51E90D Comment Length        0000 (0)\n-51E90F Disk Start            0000 (0)\n-51E911 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E913 Ext File Attributes   00000000 (0)\n-51E917 Local Header Offset   000D6C0C (879628)\n-51E91B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E91B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51E978 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51E97A   Length              0005 (5)\n-51E97C   Flags               01 (1) 'Modification'\n-51E97D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51E981 CENTRAL HEADER #341   02014B50 (33639248)\n-51E985 Created Zip Spec      14 (20) '2.0'\n-51E986 Created OS            00 (0) 'MS-DOS'\n-51E987 Extract Zip Spec      14 (20) '2.0'\n-51E988 Extract OS            00 (0) 'MS-DOS'\n-51E989 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51E98B Compression Method    0000 (0) 'Stored'\n-51E98D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51E991 CRC                   CD183667 (3440916071)\n-51E995 Compressed Size       00001A6E (6766)\n-51E999 Uncompressed Size     00001A6E (6766)\n-51E99D Filename Length       0073 (115)\n-51E99F Extra Length          0009 (9)\n-51E9A1 Comment Length        0000 (0)\n-51E9A3 Disk Start            0000 (0)\n-51E9A5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51E9A7 Ext File Attributes   00000000 (0)\n-51E9AB Local Header Offset   000D6C90 (879760)\n-51E9AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51E9AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EA22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EA24   Length              0005 (5)\n-51EA26   Flags               01 (1) 'Modification'\n-51EA27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EA2B CENTRAL HEADER #342   02014B50 (33639248)\n-51EA2F Created Zip Spec      14 (20) '2.0'\n-51EA30 Created OS            00 (0) 'MS-DOS'\n-51EA31 Extract Zip Spec      14 (20) '2.0'\n-51EA32 Extract OS            00 (0) 'MS-DOS'\n-51EA33 General Purpose Flag  0000 (0)\n-51EA35 Compression Method    0000 (0) 'Stored'\n-51EA37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EA3B CRC                   00000000 (0)\n-51EA3F Compressed Size       00000000 (0)\n-51EA43 Uncompressed Size     00000000 (0)\n-51EA47 Filename Length       005D (93)\n-51EA49 Extra Length          0009 (9)\n-51EA4B Comment Length        0000 (0)\n-51EA4D Disk Start            0000 (0)\n-51EA4F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EA51 Ext File Attributes   00000000 (0)\n-51EA55 Local Header Offset   000D87A8 (886696)\n-51EA59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EA59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EAB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EAB8   Length              0005 (5)\n-51EABA   Flags               01 (1) 'Modification'\n-51EABB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EABF CENTRAL HEADER #343   02014B50 (33639248)\n-51EAC3 Created Zip Spec      14 (20) '2.0'\n-51EAC4 Created OS            00 (0) 'MS-DOS'\n-51EAC5 Extract Zip Spec      14 (20) '2.0'\n-51EAC6 Extract OS            00 (0) 'MS-DOS'\n-51EAC7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51EAC9 Compression Method    0000 (0) 'Stored'\n-51EACB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EACF CRC                   0C7DD276 (209572470)\n-51EAD3 Compressed Size       00001A92 (6802)\n-51EAD7 Uncompressed Size     00001A92 (6802)\n-51EADB Filename Length       0073 (115)\n-51EADD Extra Length          0009 (9)\n-51EADF Comment Length        0000 (0)\n-51EAE1 Disk Start            0000 (0)\n-51EAE3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EAE5 Ext File Attributes   00000000 (0)\n-51EAE9 Local Header Offset   000D882C (886828)\n-51EAED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EAED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EB60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EB62   Length              0005 (5)\n-51EB64   Flags               01 (1) 'Modification'\n-51EB65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EB69 CENTRAL HEADER #344   02014B50 (33639248)\n-51EB6D Created Zip Spec      14 (20) '2.0'\n-51EB6E Created OS            00 (0) 'MS-DOS'\n-51EB6F Extract Zip Spec      14 (20) '2.0'\n-51EB70 Extract OS            00 (0) 'MS-DOS'\n-51EB71 General Purpose Flag  0000 (0)\n-51EB73 Compression Method    0000 (0) 'Stored'\n-51EB75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EB79 CRC                   00000000 (0)\n-51EB7D Compressed Size       00000000 (0)\n-51EB81 Uncompressed Size     00000000 (0)\n-51EB85 Filename Length       005E (94)\n-51EB87 Extra Length          0009 (9)\n-51EB89 Comment Length        0000 (0)\n-51EB8B Disk Start            0000 (0)\n-51EB8D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EB8F Ext File Attributes   00000000 (0)\n-51EB93 Local Header Offset   000DA368 (893800)\n-51EB97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EB97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EBF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EBF7   Length              0005 (5)\n-51EBF9   Flags               01 (1) 'Modification'\n-51EBFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EBFE CENTRAL HEADER #345   02014B50 (33639248)\n-51EC02 Created Zip Spec      14 (20) '2.0'\n-51EC03 Created OS            00 (0) 'MS-DOS'\n-51EC04 Extract Zip Spec      14 (20) '2.0'\n-51EC05 Extract OS            00 (0) 'MS-DOS'\n-51EC06 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51EC08 Compression Method    0000 (0) 'Stored'\n-51EC0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EC0E CRC                   60EA12C2 (1625952962)\n-51EC12 Compressed Size       00001733 (5939)\n-51EC16 Uncompressed Size     00001733 (5939)\n-51EC1A Filename Length       0074 (116)\n-51EC1C Extra Length          0009 (9)\n-51EC1E Comment Length        0000 (0)\n-51EC20 Disk Start            0000 (0)\n-51EC22 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EC24 Ext File Attributes   00000000 (0)\n-51EC28 Local Header Offset   000DA3ED (893933)\n-51EC2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EC2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51ECA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51ECA2   Length              0005 (5)\n-51ECA4   Flags               01 (1) 'Modification'\n-51ECA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51ECA9 CENTRAL HEADER #346   02014B50 (33639248)\n-51ECAD Created Zip Spec      14 (20) '2.0'\n-51ECAE Created OS            00 (0) 'MS-DOS'\n-51ECAF Extract Zip Spec      14 (20) '2.0'\n-51ECB0 Extract OS            00 (0) 'MS-DOS'\n-51ECB1 General Purpose Flag  0000 (0)\n-51ECB3 Compression Method    0000 (0) 'Stored'\n-51ECB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51ECB9 CRC                   00000000 (0)\n-51ECBD Compressed Size       00000000 (0)\n-51ECC1 Uncompressed Size     00000000 (0)\n-51ECC5 Filename Length       0061 (97)\n-51ECC7 Extra Length          0009 (9)\n-51ECC9 Comment Length        0000 (0)\n-51ECCB Disk Start            0000 (0)\n-51ECCD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51ECCF Ext File Attributes   00000000 (0)\n-51ECD3 Local Header Offset   000DBBCB (900043)\n-51ECD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51ECD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51ED38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51ED3A   Length              0005 (5)\n-51ED3C   Flags               01 (1) 'Modification'\n-51ED3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51ED41 CENTRAL HEADER #347   02014B50 (33639248)\n-51ED45 Created Zip Spec      14 (20) '2.0'\n-51ED46 Created OS            00 (0) 'MS-DOS'\n-51ED47 Extract Zip Spec      14 (20) '2.0'\n-51ED48 Extract OS            00 (0) 'MS-DOS'\n-51ED49 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51ED4B Compression Method    0000 (0) 'Stored'\n-51ED4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51ED51 CRC                   4BB1EABD (1269951165)\n-51ED55 Compressed Size       0000167D (5757)\n-51ED59 Uncompressed Size     0000167D (5757)\n-51ED5D Filename Length       0077 (119)\n-51ED5F Extra Length          0009 (9)\n-51ED61 Comment Length        0000 (0)\n-51ED63 Disk Start            0000 (0)\n-51ED65 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51ED67 Ext File Attributes   00000000 (0)\n-51ED6B Local Header Offset   000DBC53 (900179)\n-51ED6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51ED6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EDE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EDE8   Length              0005 (5)\n-51EDEA   Flags               01 (1) 'Modification'\n-51EDEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EDEF CENTRAL HEADER #348   02014B50 (33639248)\n-51EDF3 Created Zip Spec      14 (20) '2.0'\n-51EDF4 Created OS            00 (0) 'MS-DOS'\n-51EDF5 Extract Zip Spec      14 (20) '2.0'\n-51EDF6 Extract OS            00 (0) 'MS-DOS'\n-51EDF7 General Purpose Flag  0000 (0)\n-51EDF9 Compression Method    0000 (0) 'Stored'\n-51EDFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EDFF CRC                   00000000 (0)\n-51EE03 Compressed Size       00000000 (0)\n-51EE07 Uncompressed Size     00000000 (0)\n-51EE0B Filename Length       0061 (97)\n-51EE0D Extra Length          0009 (9)\n-51EE0F Comment Length        0000 (0)\n-51EE11 Disk Start            0000 (0)\n-51EE13 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EE15 Ext File Attributes   00000000 (0)\n-51EE19 Local Header Offset   000DD37E (906110)\n-51EE1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EE1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EE7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EE80   Length              0005 (5)\n-51EE82   Flags               01 (1) 'Modification'\n-51EE83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EE87 CENTRAL HEADER #349   02014B50 (33639248)\n-51EE8B Created Zip Spec      14 (20) '2.0'\n-51EE8C Created OS            00 (0) 'MS-DOS'\n-51EE8D Extract Zip Spec      14 (20) '2.0'\n-51EE8E Extract OS            00 (0) 'MS-DOS'\n-51EE8F General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51EE91 Compression Method    0000 (0) 'Stored'\n-51EE93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EE97 CRC                   A18A8EB9 (2710212281)\n-51EE9B Compressed Size       0000328A (12938)\n-51EE9F Uncompressed Size     0000328A (12938)\n-51EEA3 Filename Length       0077 (119)\n-51EEA5 Extra Length          0009 (9)\n-51EEA7 Comment Length        0000 (0)\n-51EEA9 Disk Start            0000 (0)\n-51EEAB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EEAD Ext File Attributes   00000000 (0)\n-51EEB1 Local Header Offset   000DD406 (906246)\n-51EEB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EEB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EF2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EF2E   Length              0005 (5)\n-51EF30   Flags               01 (1) 'Modification'\n-51EF31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EF35 CENTRAL HEADER #350   02014B50 (33639248)\n-51EF39 Created Zip Spec      14 (20) '2.0'\n-51EF3A Created OS            00 (0) 'MS-DOS'\n-51EF3B Extract Zip Spec      14 (20) '2.0'\n-51EF3C Extract OS            00 (0) 'MS-DOS'\n-51EF3D General Purpose Flag  0000 (0)\n-51EF3F Compression Method    0000 (0) 'Stored'\n-51EF41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EF45 CRC                   00000000 (0)\n-51EF49 Compressed Size       00000000 (0)\n-51EF4D Uncompressed Size     00000000 (0)\n-51EF51 Filename Length       0060 (96)\n-51EF53 Extra Length          0009 (9)\n-51EF55 Comment Length        0000 (0)\n-51EF57 Disk Start            0000 (0)\n-51EF59 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EF5B Ext File Attributes   00000000 (0)\n-51EF5F Local Header Offset   000E073E (919358)\n-51EF63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EF63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51EFC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51EFC5   Length              0005 (5)\n-51EFC7   Flags               01 (1) 'Modification'\n-51EFC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51EFCC CENTRAL HEADER #351   02014B50 (33639248)\n-51EFD0 Created Zip Spec      14 (20) '2.0'\n-51EFD1 Created OS            00 (0) 'MS-DOS'\n-51EFD2 Extract Zip Spec      14 (20) '2.0'\n-51EFD3 Extract OS            00 (0) 'MS-DOS'\n-51EFD4 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51EFD6 Compression Method    0000 (0) 'Stored'\n-51EFD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51EFDC CRC                   B7B762D6 (3082248918)\n-51EFE0 Compressed Size       00003879 (14457)\n-51EFE4 Uncompressed Size     00003879 (14457)\n-51EFE8 Filename Length       0076 (118)\n-51EFEA Extra Length          0009 (9)\n-51EFEC Comment Length        0000 (0)\n-51EFEE Disk Start            0000 (0)\n-51EFF0 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51EFF2 Ext File Attributes   00000000 (0)\n-51EFF6 Local Header Offset   000E07C5 (919493)\n-51EFFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51EFFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F070 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F072   Length              0005 (5)\n-51F074   Flags               01 (1) 'Modification'\n-51F075   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F079 CENTRAL HEADER #352   02014B50 (33639248)\n-51F07D Created Zip Spec      14 (20) '2.0'\n-51F07E Created OS            00 (0) 'MS-DOS'\n-51F07F Extract Zip Spec      14 (20) '2.0'\n-51F080 Extract OS            00 (0) 'MS-DOS'\n-51F081 General Purpose Flag  0000 (0)\n-51F083 Compression Method    0000 (0) 'Stored'\n-51F085 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F089 CRC                   00000000 (0)\n-51F08D Compressed Size       00000000 (0)\n-51F091 Uncompressed Size     00000000 (0)\n-51F095 Filename Length       0064 (100)\n-51F097 Extra Length          0009 (9)\n-51F099 Comment Length        0000 (0)\n-51F09B Disk Start            0000 (0)\n-51F09D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F09F Ext File Attributes   00000000 (0)\n-51F0A3 Local Header Offset   000E40EB (934123)\n-51F0A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F0A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F10B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F10D   Length              0005 (5)\n-51F10F   Flags               01 (1) 'Modification'\n-51F110   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F114 CENTRAL HEADER #353   02014B50 (33639248)\n-51F118 Created Zip Spec      14 (20) '2.0'\n-51F119 Created OS            00 (0) 'MS-DOS'\n-51F11A Extract Zip Spec      14 (20) '2.0'\n-51F11B Extract OS            00 (0) 'MS-DOS'\n-51F11C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F11E Compression Method    0000 (0) 'Stored'\n-51F120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F124 CRC                   A2B9D29A (2730087066)\n-51F128 Compressed Size       00002150 (8528)\n-51F12C Uncompressed Size     00002150 (8528)\n-51F130 Filename Length       007A (122)\n-51F132 Extra Length          0009 (9)\n-51F134 Comment Length        0000 (0)\n-51F136 Disk Start            0000 (0)\n-51F138 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F13A Ext File Attributes   00000000 (0)\n-51F13E Local Header Offset   000E4176 (934262)\n-51F142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F1BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F1BE   Length              0005 (5)\n-51F1C0   Flags               01 (1) 'Modification'\n-51F1C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F1C5 CENTRAL HEADER #354   02014B50 (33639248)\n-51F1C9 Created Zip Spec      14 (20) '2.0'\n-51F1CA Created OS            00 (0) 'MS-DOS'\n-51F1CB Extract Zip Spec      14 (20) '2.0'\n-51F1CC Extract OS            00 (0) 'MS-DOS'\n-51F1CD General Purpose Flag  0000 (0)\n-51F1CF Compression Method    0000 (0) 'Stored'\n-51F1D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F1D5 CRC                   00000000 (0)\n-51F1D9 Compressed Size       00000000 (0)\n-51F1DD Uncompressed Size     00000000 (0)\n-51F1E1 Filename Length       005D (93)\n-51F1E3 Extra Length          0009 (9)\n-51F1E5 Comment Length        0000 (0)\n-51F1E7 Disk Start            0000 (0)\n-51F1E9 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F1EB Ext File Attributes   00000000 (0)\n-51F1EF Local Header Offset   000E6377 (942967)\n-51F1F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F1F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F250 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F252   Length              0005 (5)\n-51F254   Flags               01 (1) 'Modification'\n-51F255   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F259 CENTRAL HEADER #355   02014B50 (33639248)\n-51F25D Created Zip Spec      14 (20) '2.0'\n-51F25E Created OS            00 (0) 'MS-DOS'\n-51F25F Extract Zip Spec      14 (20) '2.0'\n-51F260 Extract OS            00 (0) 'MS-DOS'\n-51F261 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F263 Compression Method    0000 (0) 'Stored'\n-51F265 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F269 CRC                   C4FC7EA2 (3304881826)\n-51F26D Compressed Size       000011DC (4572)\n-51F271 Uncompressed Size     000011DC (4572)\n-51F275 Filename Length       0073 (115)\n-51F277 Extra Length          0009 (9)\n-51F279 Comment Length        0000 (0)\n-51F27B Disk Start            0000 (0)\n-51F27D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F27F Ext File Attributes   00000000 (0)\n-51F283 Local Header Offset   000E63FB (943099)\n-51F287 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F287: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F2FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F2FC   Length              0005 (5)\n-51F2FE   Flags               01 (1) 'Modification'\n-51F2FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F303 CENTRAL HEADER #356   02014B50 (33639248)\n-51F307 Created Zip Spec      14 (20) '2.0'\n-51F308 Created OS            00 (0) 'MS-DOS'\n-51F309 Extract Zip Spec      14 (20) '2.0'\n-51F30A Extract OS            00 (0) 'MS-DOS'\n-51F30B General Purpose Flag  0000 (0)\n-51F30D Compression Method    0000 (0) 'Stored'\n-51F30F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F313 CRC                   00000000 (0)\n-51F317 Compressed Size       00000000 (0)\n-51F31B Uncompressed Size     00000000 (0)\n-51F31F Filename Length       0060 (96)\n-51F321 Extra Length          0009 (9)\n-51F323 Comment Length        0000 (0)\n-51F325 Disk Start            0000 (0)\n-51F327 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F329 Ext File Attributes   00000000 (0)\n-51F32D Local Header Offset   000E7681 (947841)\n-51F331 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F331: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F391 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F393   Length              0005 (5)\n-51F395   Flags               01 (1) 'Modification'\n-51F396   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F39A CENTRAL HEADER #357   02014B50 (33639248)\n-51F39E Created Zip Spec      14 (20) '2.0'\n-51F39F Created OS            00 (0) 'MS-DOS'\n-51F3A0 Extract Zip Spec      14 (20) '2.0'\n-51F3A1 Extract OS            00 (0) 'MS-DOS'\n-51F3A2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F3A4 Compression Method    0000 (0) 'Stored'\n-51F3A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F3AA CRC                   EE30A8D8 (3996166360)\n-51F3AE Compressed Size       000072FB (29435)\n-51F3B2 Uncompressed Size     000072FB (29435)\n-51F3B6 Filename Length       0076 (118)\n-51F3B8 Extra Length          0009 (9)\n-51F3BA Comment Length        0000 (0)\n-51F3BC Disk Start            0000 (0)\n-51F3BE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F3C0 Ext File Attributes   00000000 (0)\n-51F3C4 Local Header Offset   000E7708 (947976)\n-51F3C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F3C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F43E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F440   Length              0005 (5)\n-51F442   Flags               01 (1) 'Modification'\n-51F443   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F447 CENTRAL HEADER #358   02014B50 (33639248)\n-51F44B Created Zip Spec      14 (20) '2.0'\n-51F44C Created OS            00 (0) 'MS-DOS'\n-51F44D Extract Zip Spec      14 (20) '2.0'\n-51F44E Extract OS            00 (0) 'MS-DOS'\n-51F44F General Purpose Flag  0000 (0)\n-51F451 Compression Method    0000 (0) 'Stored'\n-51F453 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F457 CRC                   00000000 (0)\n-51F45B Compressed Size       00000000 (0)\n-51F45F Uncompressed Size     00000000 (0)\n-51F463 Filename Length       0066 (102)\n-51F465 Extra Length          0009 (9)\n-51F467 Comment Length        0000 (0)\n-51F469 Disk Start            0000 (0)\n-51F46B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F46D Ext File Attributes   00000000 (0)\n-51F471 Local Header Offset   000EEAB0 (977584)\n-51F475 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F475: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F4DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F4DD   Length              0005 (5)\n-51F4DF   Flags               01 (1) 'Modification'\n-51F4E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F4E4 CENTRAL HEADER #359   02014B50 (33639248)\n-51F4E8 Created Zip Spec      14 (20) '2.0'\n-51F4E9 Created OS            00 (0) 'MS-DOS'\n-51F4EA Extract Zip Spec      14 (20) '2.0'\n-51F4EB Extract OS            00 (0) 'MS-DOS'\n-51F4EC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F4EE Compression Method    0000 (0) 'Stored'\n-51F4F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F4F4 CRC                   EA36353C (3929421116)\n-51F4F8 Compressed Size       0000480E (18446)\n-51F4FC Uncompressed Size     0000480E (18446)\n-51F500 Filename Length       007C (124)\n-51F502 Extra Length          0009 (9)\n-51F504 Comment Length        0000 (0)\n-51F506 Disk Start            0000 (0)\n-51F508 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F50A Ext File Attributes   00000000 (0)\n-51F50E Local Header Offset   000EEB3D (977725)\n-51F512 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F512: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F58E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F590   Length              0005 (5)\n-51F592   Flags               01 (1) 'Modification'\n-51F593   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F597 CENTRAL HEADER #360   02014B50 (33639248)\n-51F59B Created Zip Spec      14 (20) '2.0'\n-51F59C Created OS            00 (0) 'MS-DOS'\n-51F59D Extract Zip Spec      14 (20) '2.0'\n-51F59E Extract OS            00 (0) 'MS-DOS'\n-51F59F General Purpose Flag  0000 (0)\n-51F5A1 Compression Method    0000 (0) 'Stored'\n-51F5A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F5A7 CRC                   00000000 (0)\n-51F5AB Compressed Size       00000000 (0)\n-51F5AF Uncompressed Size     00000000 (0)\n-51F5B3 Filename Length       0065 (101)\n-51F5B5 Extra Length          0009 (9)\n-51F5B7 Comment Length        0000 (0)\n-51F5B9 Disk Start            0000 (0)\n-51F5BB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F5BD Ext File Attributes   00000000 (0)\n-51F5C1 Local Header Offset   000F33FE (996350)\n-51F5C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F5C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F62A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F62C   Length              0005 (5)\n-51F62E   Flags               01 (1) 'Modification'\n-51F62F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F633 CENTRAL HEADER #361   02014B50 (33639248)\n-51F637 Created Zip Spec      14 (20) '2.0'\n-51F638 Created OS            00 (0) 'MS-DOS'\n-51F639 Extract Zip Spec      14 (20) '2.0'\n-51F63A Extract OS            00 (0) 'MS-DOS'\n-51F63B General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F63D Compression Method    0000 (0) 'Stored'\n-51F63F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F643 CRC                   CA474DE0 (3393670624)\n-51F647 Compressed Size       000007B6 (1974)\n-51F64B Uncompressed Size     000007B6 (1974)\n-51F64F Filename Length       007B (123)\n-51F651 Extra Length          0009 (9)\n-51F653 Comment Length        0000 (0)\n-51F655 Disk Start            0000 (0)\n-51F657 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F659 Ext File Attributes   00000000 (0)\n-51F65D Local Header Offset   000F348A (996490)\n-51F661 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F661: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F6DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F6DE   Length              0005 (5)\n-51F6E0   Flags               01 (1) 'Modification'\n-51F6E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F6E5 CENTRAL HEADER #362   02014B50 (33639248)\n-51F6E9 Created Zip Spec      14 (20) '2.0'\n-51F6EA Created OS            00 (0) 'MS-DOS'\n-51F6EB Extract Zip Spec      14 (20) '2.0'\n-51F6EC Extract OS            00 (0) 'MS-DOS'\n-51F6ED General Purpose Flag  0000 (0)\n-51F6EF Compression Method    0000 (0) 'Stored'\n-51F6F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F6F5 CRC                   00000000 (0)\n-51F6F9 Compressed Size       00000000 (0)\n-51F6FD Uncompressed Size     00000000 (0)\n-51F701 Filename Length       0061 (97)\n-51F703 Extra Length          0009 (9)\n-51F705 Comment Length        0000 (0)\n-51F707 Disk Start            0000 (0)\n-51F709 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F70B Ext File Attributes   00000000 (0)\n-51F70F Local Header Offset   000F3CF2 (998642)\n-51F713 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F713: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F774 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F776   Length              0005 (5)\n-51F778   Flags               01 (1) 'Modification'\n-51F779   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F77D CENTRAL HEADER #363   02014B50 (33639248)\n-51F781 Created Zip Spec      14 (20) '2.0'\n-51F782 Created OS            00 (0) 'MS-DOS'\n-51F783 Extract Zip Spec      14 (20) '2.0'\n-51F784 Extract OS            00 (0) 'MS-DOS'\n-51F785 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F787 Compression Method    0000 (0) 'Stored'\n-51F789 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F78D CRC                   A19F99D4 (2711591380)\n-51F791 Compressed Size       000011CB (4555)\n-51F795 Uncompressed Size     000011CB (4555)\n-51F799 Filename Length       0077 (119)\n-51F79B Extra Length          0009 (9)\n-51F79D Comment Length        0000 (0)\n-51F79F Disk Start            0000 (0)\n-51F7A1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F7A3 Ext File Attributes   00000000 (0)\n-51F7A7 Local Header Offset   000F3D7A (998778)\n-51F7AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F7AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F822 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F824   Length              0005 (5)\n-51F826   Flags               01 (1) 'Modification'\n-51F827   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F82B CENTRAL HEADER #364   02014B50 (33639248)\n-51F82F Created Zip Spec      14 (20) '2.0'\n-51F830 Created OS            00 (0) 'MS-DOS'\n-51F831 Extract Zip Spec      14 (20) '2.0'\n-51F832 Extract OS            00 (0) 'MS-DOS'\n-51F833 General Purpose Flag  0000 (0)\n-51F835 Compression Method    0000 (0) 'Stored'\n-51F837 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F83B CRC                   00000000 (0)\n-51F83F Compressed Size       00000000 (0)\n-51F843 Uncompressed Size     00000000 (0)\n-51F847 Filename Length       005D (93)\n-51F849 Extra Length          0009 (9)\n-51F84B Comment Length        0000 (0)\n-51F84D Disk Start            0000 (0)\n-51F84F Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F851 Ext File Attributes   00000000 (0)\n-51F855 Local Header Offset   000F4FF3 (1003507)\n-51F859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F8B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F8B8   Length              0005 (5)\n-51F8BA   Flags               01 (1) 'Modification'\n-51F8BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F8BF CENTRAL HEADER #365   02014B50 (33639248)\n-51F8C3 Created Zip Spec      14 (20) '2.0'\n-51F8C4 Created OS            00 (0) 'MS-DOS'\n-51F8C5 Extract Zip Spec      14 (20) '2.0'\n-51F8C6 Extract OS            00 (0) 'MS-DOS'\n-51F8C7 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51F8C9 Compression Method    0000 (0) 'Stored'\n-51F8CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F8CF CRC                   7573E84B (1970530379)\n-51F8D3 Compressed Size       0000284F (10319)\n-51F8D7 Uncompressed Size     0000284F (10319)\n-51F8DB Filename Length       0073 (115)\n-51F8DD Extra Length          0009 (9)\n-51F8DF Comment Length        0000 (0)\n-51F8E1 Disk Start            0000 (0)\n-51F8E3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F8E5 Ext File Attributes   00000000 (0)\n-51F8E9 Local Header Offset   000F5077 (1003639)\n-51F8ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F8ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F960 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F962   Length              0005 (5)\n-51F964   Flags               01 (1) 'Modification'\n-51F965   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51F969 CENTRAL HEADER #366   02014B50 (33639248)\n-51F96D Created Zip Spec      14 (20) '2.0'\n-51F96E Created OS            00 (0) 'MS-DOS'\n-51F96F Extract Zip Spec      14 (20) '2.0'\n-51F970 Extract OS            00 (0) 'MS-DOS'\n-51F971 General Purpose Flag  0000 (0)\n-51F973 Compression Method    0000 (0) 'Stored'\n-51F975 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51F979 CRC                   00000000 (0)\n-51F97D Compressed Size       00000000 (0)\n-51F981 Uncompressed Size     00000000 (0)\n-51F985 Filename Length       0061 (97)\n-51F987 Extra Length          0009 (9)\n-51F989 Comment Length        0000 (0)\n-51F98B Disk Start            0000 (0)\n-51F98D Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51F98F Ext File Attributes   00000000 (0)\n-51F993 Local Header Offset   000F7970 (1014128)\n-51F997 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51F997: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51F9F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51F9FA   Length              0005 (5)\n-51F9FC   Flags               01 (1) 'Modification'\n-51F9FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FA01 CENTRAL HEADER #367   02014B50 (33639248)\n-51FA05 Created Zip Spec      14 (20) '2.0'\n-51FA06 Created OS            00 (0) 'MS-DOS'\n-51FA07 Extract Zip Spec      14 (20) '2.0'\n-51FA08 Extract OS            00 (0) 'MS-DOS'\n-51FA09 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51FA0B Compression Method    0000 (0) 'Stored'\n-51FA0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FA11 CRC                   131CB9D8 (320649688)\n-51FA15 Compressed Size       00002777 (10103)\n-51FA19 Uncompressed Size     00002777 (10103)\n-51FA1D Filename Length       0077 (119)\n-51FA1F Extra Length          0009 (9)\n-51FA21 Comment Length        0000 (0)\n-51FA23 Disk Start            0000 (0)\n-51FA25 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FA27 Ext File Attributes   00000000 (0)\n-51FA2B Local Header Offset   000F79F8 (1014264)\n-51FA2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FA2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FAA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FAA8   Length              0005 (5)\n-51FAAA   Flags               01 (1) 'Modification'\n-51FAAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FAAF CENTRAL HEADER #368   02014B50 (33639248)\n-51FAB3 Created Zip Spec      14 (20) '2.0'\n-51FAB4 Created OS            00 (0) 'MS-DOS'\n-51FAB5 Extract Zip Spec      14 (20) '2.0'\n-51FAB6 Extract OS            00 (0) 'MS-DOS'\n-51FAB7 General Purpose Flag  0000 (0)\n-51FAB9 Compression Method    0000 (0) 'Stored'\n-51FABB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FABF CRC                   00000000 (0)\n-51FAC3 Compressed Size       00000000 (0)\n-51FAC7 Uncompressed Size     00000000 (0)\n-51FACB Filename Length       0060 (96)\n-51FACD Extra Length          0009 (9)\n-51FACF Comment Length        0000 (0)\n-51FAD1 Disk Start            0000 (0)\n-51FAD3 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FAD5 Ext File Attributes   00000000 (0)\n-51FAD9 Local Header Offset   000FA21D (1024541)\n-51FADD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FADD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FB3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FB3F   Length              0005 (5)\n-51FB41   Flags               01 (1) 'Modification'\n-51FB42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FB46 CENTRAL HEADER #369   02014B50 (33639248)\n-51FB4A Created Zip Spec      14 (20) '2.0'\n-51FB4B Created OS            00 (0) 'MS-DOS'\n-51FB4C Extract Zip Spec      14 (20) '2.0'\n-51FB4D Extract OS            00 (0) 'MS-DOS'\n-51FB4E General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51FB50 Compression Method    0000 (0) 'Stored'\n-51FB52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FB56 CRC                   95FAB1DA (2516234714)\n-51FB5A Compressed Size       0000110D (4365)\n-51FB5E Uncompressed Size     0000110D (4365)\n-51FB62 Filename Length       0076 (118)\n-51FB64 Extra Length          0009 (9)\n-51FB66 Comment Length        0000 (0)\n-51FB68 Disk Start            0000 (0)\n-51FB6A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FB6C Ext File Attributes   00000000 (0)\n-51FB70 Local Header Offset   000FA2A4 (1024676)\n-51FB74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FB74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FBEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FBEC   Length              0005 (5)\n-51FBEE   Flags               01 (1) 'Modification'\n-51FBEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FBF3 CENTRAL HEADER #370   02014B50 (33639248)\n-51FBF7 Created Zip Spec      14 (20) '2.0'\n-51FBF8 Created OS            00 (0) 'MS-DOS'\n-51FBF9 Extract Zip Spec      14 (20) '2.0'\n-51FBFA Extract OS            00 (0) 'MS-DOS'\n-51FBFB General Purpose Flag  0000 (0)\n-51FBFD Compression Method    0000 (0) 'Stored'\n-51FBFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FC03 CRC                   00000000 (0)\n-51FC07 Compressed Size       00000000 (0)\n-51FC0B Uncompressed Size     00000000 (0)\n-51FC0F Filename Length       0063 (99)\n-51FC11 Extra Length          0009 (9)\n-51FC13 Comment Length        0000 (0)\n-51FC15 Disk Start            0000 (0)\n-51FC17 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FC19 Ext File Attributes   00000000 (0)\n-51FC1D Local Header Offset   000FB45E (1029214)\n-51FC21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FC21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FC84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FC86   Length              0005 (5)\n-51FC88   Flags               01 (1) 'Modification'\n-51FC89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FC8D CENTRAL HEADER #371   02014B50 (33639248)\n-51FC91 Created Zip Spec      14 (20) '2.0'\n-51FC92 Created OS            00 (0) 'MS-DOS'\n-51FC93 Extract Zip Spec      14 (20) '2.0'\n-51FC94 Extract OS            00 (0) 'MS-DOS'\n-51FC95 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51FC97 Compression Method    0000 (0) 'Stored'\n-51FC99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FC9D CRC                   B1E82858 (2984781912)\n-51FCA1 Compressed Size       000019D6 (6614)\n-51FCA5 Uncompressed Size     000019D6 (6614)\n-51FCA9 Filename Length       0079 (121)\n-51FCAB Extra Length          0009 (9)\n-51FCAD Comment Length        0000 (0)\n-51FCAF Disk Start            0000 (0)\n-51FCB1 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FCB3 Ext File Attributes   00000000 (0)\n-51FCB7 Local Header Offset   000FB4E8 (1029352)\n-51FCBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FCBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FD34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FD36   Length              0005 (5)\n-51FD38   Flags               01 (1) 'Modification'\n-51FD39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FD3D CENTRAL HEADER #372   02014B50 (33639248)\n-51FD41 Created Zip Spec      14 (20) '2.0'\n-51FD42 Created OS            00 (0) 'MS-DOS'\n-51FD43 Extract Zip Spec      14 (20) '2.0'\n-51FD44 Extract OS            00 (0) 'MS-DOS'\n-51FD45 General Purpose Flag  0000 (0)\n-51FD47 Compression Method    0000 (0) 'Stored'\n-51FD49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FD4D CRC                   00000000 (0)\n-51FD51 Compressed Size       00000000 (0)\n-51FD55 Uncompressed Size     00000000 (0)\n-51FD59 Filename Length       0060 (96)\n-51FD5B Extra Length          0009 (9)\n-51FD5D Comment Length        0000 (0)\n-51FD5F Disk Start            0000 (0)\n-51FD61 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FD63 Ext File Attributes   00000000 (0)\n-51FD67 Local Header Offset   000FCF6E (1036142)\n-51FD6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FD6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FDCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FDCD   Length              0005 (5)\n-51FDCF   Flags               01 (1) 'Modification'\n-51FDD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FDD4 CENTRAL HEADER #373   02014B50 (33639248)\n-51FDD8 Created Zip Spec      14 (20) '2.0'\n-51FDD9 Created OS            00 (0) 'MS-DOS'\n-51FDDA Extract Zip Spec      14 (20) '2.0'\n-51FDDB Extract OS            00 (0) 'MS-DOS'\n-51FDDC General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51FDDE Compression Method    0000 (0) 'Stored'\n-51FDE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FDE4 CRC                   EA13965E (3927152222)\n-51FDE8 Compressed Size       00000F7E (3966)\n-51FDEC Uncompressed Size     00000F7E (3966)\n-51FDF0 Filename Length       0076 (118)\n-51FDF2 Extra Length          0009 (9)\n-51FDF4 Comment Length        0000 (0)\n-51FDF6 Disk Start            0000 (0)\n-51FDF8 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FDFA Ext File Attributes   00000000 (0)\n-51FDFE Local Header Offset   000FCFF5 (1036277)\n-51FE02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FE02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FE78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FE7A   Length              0005 (5)\n-51FE7C   Flags               01 (1) 'Modification'\n-51FE7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FE81 CENTRAL HEADER #374   02014B50 (33639248)\n-51FE85 Created Zip Spec      14 (20) '2.0'\n-51FE86 Created OS            00 (0) 'MS-DOS'\n-51FE87 Extract Zip Spec      14 (20) '2.0'\n-51FE88 Extract OS            00 (0) 'MS-DOS'\n-51FE89 General Purpose Flag  0000 (0)\n-51FE8B Compression Method    0000 (0) 'Stored'\n-51FE8D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FE91 CRC                   00000000 (0)\n-51FE95 Compressed Size       00000000 (0)\n-51FE99 Uncompressed Size     00000000 (0)\n-51FE9D Filename Length       0059 (89)\n-51FE9F Extra Length          0009 (9)\n-51FEA1 Comment Length        0000 (0)\n-51FEA3 Disk Start            0000 (0)\n-51FEA5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FEA7 Ext File Attributes   00000000 (0)\n-51FEAB Local Header Offset   000FE020 (1040416)\n-51FEAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FEAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FF08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FF0A   Length              0005 (5)\n-51FF0C   Flags               01 (1) 'Modification'\n-51FF0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FF11 CENTRAL HEADER #375   02014B50 (33639248)\n-51FF15 Created Zip Spec      14 (20) '2.0'\n-51FF16 Created OS            00 (0) 'MS-DOS'\n-51FF17 Extract Zip Spec      14 (20) '2.0'\n-51FF18 Extract OS            00 (0) 'MS-DOS'\n-51FF19 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-51FF1B Compression Method    0000 (0) 'Stored'\n-51FF1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FF21 CRC                   C8903588 (3364894088)\n-51FF25 Compressed Size       00002CD6 (11478)\n-51FF29 Uncompressed Size     00002CD6 (11478)\n-51FF2D Filename Length       006F (111)\n-51FF2F Extra Length          0009 (9)\n-51FF31 Comment Length        0000 (0)\n-51FF33 Disk Start            0000 (0)\n-51FF35 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FF37 Ext File Attributes   00000000 (0)\n-51FF3B Local Header Offset   000FE0A0 (1040544)\n-51FF3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FF3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-51FFAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-51FFB0   Length              0005 (5)\n-51FFB2   Flags               01 (1) 'Modification'\n-51FFB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-51FFB7 CENTRAL HEADER #376   02014B50 (33639248)\n-51FFBB Created Zip Spec      14 (20) '2.0'\n-51FFBC Created OS            00 (0) 'MS-DOS'\n-51FFBD Extract Zip Spec      14 (20) '2.0'\n-51FFBE Extract OS            00 (0) 'MS-DOS'\n-51FFBF General Purpose Flag  0000 (0)\n-51FFC1 Compression Method    0000 (0) 'Stored'\n-51FFC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-51FFC7 CRC                   00000000 (0)\n-51FFCB Compressed Size       00000000 (0)\n-51FFCF Uncompressed Size     00000000 (0)\n-51FFD3 Filename Length       006A (106)\n-51FFD5 Extra Length          0009 (9)\n-51FFD7 Comment Length        0000 (0)\n-51FFD9 Disk Start            0000 (0)\n-51FFDB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-51FFDD Ext File Attributes   00000000 (0)\n-51FFE1 Local Header Offset   00100E1C (1052188)\n-51FFE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x51FFE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52004F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520051   Length              0005 (5)\n-520053   Flags               01 (1) 'Modification'\n-520054   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520058 CENTRAL HEADER #377   02014B50 (33639248)\n-52005C Created Zip Spec      14 (20) '2.0'\n-52005D Created OS            00 (0) 'MS-DOS'\n-52005E Extract Zip Spec      14 (20) '2.0'\n-52005F Extract OS            00 (0) 'MS-DOS'\n-520060 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520062 Compression Method    0000 (0) 'Stored'\n-520064 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520068 CRC                   D19560D0 (3516227792)\n-52006C Compressed Size       00000A2F (2607)\n-520070 Uncompressed Size     00000A2F (2607)\n-520074 Filename Length       0080 (128)\n-520076 Extra Length          0009 (9)\n-520078 Comment Length        0000 (0)\n-52007A Disk Start            0000 (0)\n-52007C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52007E Ext File Attributes   00000000 (0)\n-520082 Local Header Offset   00100EAD (1052333)\n-520086 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520086: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520106 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520108   Length              0005 (5)\n-52010A   Flags               01 (1) 'Modification'\n-52010B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52010F CENTRAL HEADER #378   02014B50 (33639248)\n-520113 Created Zip Spec      14 (20) '2.0'\n-520114 Created OS            00 (0) 'MS-DOS'\n-520115 Extract Zip Spec      14 (20) '2.0'\n-520116 Extract OS            00 (0) 'MS-DOS'\n-520117 General Purpose Flag  0000 (0)\n-520119 Compression Method    0000 (0) 'Stored'\n-52011B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52011F CRC                   00000000 (0)\n-520123 Compressed Size       00000000 (0)\n-520127 Uncompressed Size     00000000 (0)\n-52012B Filename Length       002F (47)\n-52012D Extra Length          0009 (9)\n-52012F Comment Length        0000 (0)\n-520131 Disk Start            0000 (0)\n-520133 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520135 Ext File Attributes   00000000 (0)\n-520139 Local Header Offset   00101993 (1055123)\n-52013D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52013D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52016C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52016E   Length              0005 (5)\n-520170   Flags               01 (1) 'Modification'\n-520171   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520175 CENTRAL HEADER #379   02014B50 (33639248)\n-520179 Created Zip Spec      14 (20) '2.0'\n-52017A Created OS            00 (0) 'MS-DOS'\n-52017B Extract Zip Spec      14 (20) '2.0'\n-52017C Extract OS            00 (0) 'MS-DOS'\n-52017D General Purpose Flag  0000 (0)\n-52017F Compression Method    0000 (0) 'Stored'\n-520181 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520185 CRC                   00000000 (0)\n-520189 Compressed Size       00000000 (0)\n-52018D Uncompressed Size     00000000 (0)\n-520191 Filename Length       0038 (56)\n-520193 Extra Length          0009 (9)\n-520195 Comment Length        0000 (0)\n-520197 Disk Start            0000 (0)\n-520199 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52019B Ext File Attributes   00000000 (0)\n-52019F Local Header Offset   001019E9 (1055209)\n-5201A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5201A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5201DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5201DD   Length              0005 (5)\n-5201DF   Flags               01 (1) 'Modification'\n-5201E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5201E4 CENTRAL HEADER #380   02014B50 (33639248)\n-5201E8 Created Zip Spec      14 (20) '2.0'\n-5201E9 Created OS            00 (0) 'MS-DOS'\n-5201EA Extract Zip Spec      14 (20) '2.0'\n-5201EB Extract OS            00 (0) 'MS-DOS'\n-5201EC General Purpose Flag  0000 (0)\n-5201EE Compression Method    0000 (0) 'Stored'\n-5201F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5201F4 CRC                   00000000 (0)\n-5201F8 Compressed Size       00000000 (0)\n-5201FC Uncompressed Size     00000000 (0)\n-520200 Filename Length       006E (110)\n-520202 Extra Length          0009 (9)\n-520204 Comment Length        0000 (0)\n-520206 Disk Start            0000 (0)\n-520208 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52020A Ext File Attributes   00000000 (0)\n-52020E Local Header Offset   00101A48 (1055304)\n-520212 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520212: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520282   Length              0005 (5)\n-520284   Flags               01 (1) 'Modification'\n-520285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520289 CENTRAL HEADER #381   02014B50 (33639248)\n-52028D Created Zip Spec      14 (20) '2.0'\n-52028E Created OS            00 (0) 'MS-DOS'\n-52028F Extract Zip Spec      14 (20) '2.0'\n-520290 Extract OS            00 (0) 'MS-DOS'\n-520291 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520293 Compression Method    0000 (0) 'Stored'\n-520295 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520299 CRC                   CB05D09B (3406155931)\n-52029D Compressed Size       00005230 (21040)\n-5202A1 Uncompressed Size     00005230 (21040)\n-5202A5 Filename Length       0084 (132)\n-5202A7 Extra Length          0009 (9)\n-5202A9 Comment Length        0000 (0)\n-5202AB Disk Start            0000 (0)\n-5202AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5202AF Ext File Attributes   00000000 (0)\n-5202B3 Local Header Offset   00101ADD (1055453)\n-5202B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+51C59F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C5A1   Length              0005 (5)\n+51C5A3   Flags               01 (1) 'Modification'\n+51C5A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C5A8 CENTRAL HEADER #282   02014B50 (33639248)\n+51C5AC Created Zip Spec      14 (20) '2.0'\n+51C5AD Created OS            00 (0) 'MS-DOS'\n+51C5AE Extract Zip Spec      14 (20) '2.0'\n+51C5AF Extract OS            00 (0) 'MS-DOS'\n+51C5B0 General Purpose Flag  0000 (0)\n+51C5B2 Compression Method    0000 (0) 'Stored'\n+51C5B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C5B8 CRC                   00000000 (0)\n+51C5BC Compressed Size       00000000 (0)\n+51C5C0 Uncompressed Size     00000000 (0)\n+51C5C4 Filename Length       0024 (36)\n+51C5C6 Extra Length          0009 (9)\n+51C5C8 Comment Length        0000 (0)\n+51C5CA Disk Start            0000 (0)\n+51C5CC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C5CE Ext File Attributes   00000000 (0)\n+51C5D2 Local Header Offset   000B6C66 (748646)\n+51C5D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C5D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C5FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C5FC   Length              0005 (5)\n+51C5FE   Flags               01 (1) 'Modification'\n+51C5FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C603 CENTRAL HEADER #283   02014B50 (33639248)\n+51C607 Created Zip Spec      14 (20) '2.0'\n+51C608 Created OS            00 (0) 'MS-DOS'\n+51C609 Extract Zip Spec      14 (20) '2.0'\n+51C60A Extract OS            00 (0) 'MS-DOS'\n+51C60B General Purpose Flag  0000 (0)\n+51C60D Compression Method    0000 (0) 'Stored'\n+51C60F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C613 CRC                   00000000 (0)\n+51C617 Compressed Size       00000000 (0)\n+51C61B Uncompressed Size     00000000 (0)\n+51C61F Filename Length       002D (45)\n+51C621 Extra Length          0009 (9)\n+51C623 Comment Length        0000 (0)\n+51C625 Disk Start            0000 (0)\n+51C627 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C629 Ext File Attributes   00000000 (0)\n+51C62D Local Header Offset   000B6CB1 (748721)\n+51C631 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C631: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C65E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C660   Length              0005 (5)\n+51C662   Flags               01 (1) 'Modification'\n+51C663   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C667 CENTRAL HEADER #284   02014B50 (33639248)\n+51C66B Created Zip Spec      14 (20) '2.0'\n+51C66C Created OS            00 (0) 'MS-DOS'\n+51C66D Extract Zip Spec      14 (20) '2.0'\n+51C66E Extract OS            00 (0) 'MS-DOS'\n+51C66F General Purpose Flag  0000 (0)\n+51C671 Compression Method    0000 (0) 'Stored'\n+51C673 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C677 CRC                   00000000 (0)\n+51C67B Compressed Size       00000000 (0)\n+51C67F Uncompressed Size     00000000 (0)\n+51C683 Filename Length       005B (91)\n+51C685 Extra Length          0009 (9)\n+51C687 Comment Length        0000 (0)\n+51C689 Disk Start            0000 (0)\n+51C68B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C68D Ext File Attributes   00000000 (0)\n+51C691 Local Header Offset   000B6D05 (748805)\n+51C695 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C695: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C6F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C6F2   Length              0005 (5)\n+51C6F4   Flags               01 (1) 'Modification'\n+51C6F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C6F9 CENTRAL HEADER #285   02014B50 (33639248)\n+51C6FD Created Zip Spec      14 (20) '2.0'\n+51C6FE Created OS            00 (0) 'MS-DOS'\n+51C6FF Extract Zip Spec      14 (20) '2.0'\n+51C700 Extract OS            00 (0) 'MS-DOS'\n+51C701 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C703 Compression Method    0000 (0) 'Stored'\n+51C705 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C709 CRC                   561A3BB2 (1444559794)\n+51C70D Compressed Size       000018A8 (6312)\n+51C711 Uncompressed Size     000018A8 (6312)\n+51C715 Filename Length       0071 (113)\n+51C717 Extra Length          0009 (9)\n+51C719 Comment Length        0000 (0)\n+51C71B Disk Start            0000 (0)\n+51C71D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C71F Ext File Attributes   00000000 (0)\n+51C723 Local Header Offset   000B6D87 (748935)\n+51C727 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C727: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C79A   Length              0005 (5)\n+51C79C   Flags               01 (1) 'Modification'\n+51C79D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C7A1 CENTRAL HEADER #286   02014B50 (33639248)\n+51C7A5 Created Zip Spec      14 (20) '2.0'\n+51C7A6 Created OS            00 (0) 'MS-DOS'\n+51C7A7 Extract Zip Spec      14 (20) '2.0'\n+51C7A8 Extract OS            00 (0) 'MS-DOS'\n+51C7A9 General Purpose Flag  0000 (0)\n+51C7AB Compression Method    0000 (0) 'Stored'\n+51C7AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C7B1 CRC                   00000000 (0)\n+51C7B5 Compressed Size       00000000 (0)\n+51C7B9 Uncompressed Size     00000000 (0)\n+51C7BD Filename Length       005A (90)\n+51C7BF Extra Length          0009 (9)\n+51C7C1 Comment Length        0000 (0)\n+51C7C3 Disk Start            0000 (0)\n+51C7C5 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C7C7 Ext File Attributes   00000000 (0)\n+51C7CB Local Header Offset   000B86D7 (755415)\n+51C7CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C7CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C829 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C82B   Length              0005 (5)\n+51C82D   Flags               01 (1) 'Modification'\n+51C82E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C832 CENTRAL HEADER #287   02014B50 (33639248)\n+51C836 Created Zip Spec      14 (20) '2.0'\n+51C837 Created OS            00 (0) 'MS-DOS'\n+51C838 Extract Zip Spec      14 (20) '2.0'\n+51C839 Extract OS            00 (0) 'MS-DOS'\n+51C83A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C83C Compression Method    0000 (0) 'Stored'\n+51C83E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C842 CRC                   A1D18B9C (2714864540)\n+51C846 Compressed Size       00001AC2 (6850)\n+51C84A Uncompressed Size     00001AC2 (6850)\n+51C84E Filename Length       0070 (112)\n+51C850 Extra Length          0009 (9)\n+51C852 Comment Length        0000 (0)\n+51C854 Disk Start            0000 (0)\n+51C856 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C858 Ext File Attributes   00000000 (0)\n+51C85C Local Header Offset   000B8758 (755544)\n+51C860 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C860: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C8D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C8D2   Length              0005 (5)\n+51C8D4   Flags               01 (1) 'Modification'\n+51C8D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C8D9 CENTRAL HEADER #288   02014B50 (33639248)\n+51C8DD Created Zip Spec      14 (20) '2.0'\n+51C8DE Created OS            00 (0) 'MS-DOS'\n+51C8DF Extract Zip Spec      14 (20) '2.0'\n+51C8E0 Extract OS            00 (0) 'MS-DOS'\n+51C8E1 General Purpose Flag  0000 (0)\n+51C8E3 Compression Method    0000 (0) 'Stored'\n+51C8E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C8E9 CRC                   00000000 (0)\n+51C8ED Compressed Size       00000000 (0)\n+51C8F1 Uncompressed Size     00000000 (0)\n+51C8F5 Filename Length       005B (91)\n+51C8F7 Extra Length          0009 (9)\n+51C8F9 Comment Length        0000 (0)\n+51C8FB Disk Start            0000 (0)\n+51C8FD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C8FF Ext File Attributes   00000000 (0)\n+51C903 Local Header Offset   000BA2C1 (762561)\n+51C907 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C907: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51C962 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51C964   Length              0005 (5)\n+51C966   Flags               01 (1) 'Modification'\n+51C967   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51C96B CENTRAL HEADER #289   02014B50 (33639248)\n+51C96F Created Zip Spec      14 (20) '2.0'\n+51C970 Created OS            00 (0) 'MS-DOS'\n+51C971 Extract Zip Spec      14 (20) '2.0'\n+51C972 Extract OS            00 (0) 'MS-DOS'\n+51C973 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51C975 Compression Method    0000 (0) 'Stored'\n+51C977 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51C97B CRC                   33231FD5 (857939925)\n+51C97F Compressed Size       00001399 (5017)\n+51C983 Uncompressed Size     00001399 (5017)\n+51C987 Filename Length       0071 (113)\n+51C989 Extra Length          0009 (9)\n+51C98B Comment Length        0000 (0)\n+51C98D Disk Start            0000 (0)\n+51C98F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51C991 Ext File Attributes   00000000 (0)\n+51C995 Local Header Offset   000BA343 (762691)\n+51C999 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51C999: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CA0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CA0C   Length              0005 (5)\n+51CA0E   Flags               01 (1) 'Modification'\n+51CA0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CA13 CENTRAL HEADER #290   02014B50 (33639248)\n+51CA17 Created Zip Spec      14 (20) '2.0'\n+51CA18 Created OS            00 (0) 'MS-DOS'\n+51CA19 Extract Zip Spec      14 (20) '2.0'\n+51CA1A Extract OS            00 (0) 'MS-DOS'\n+51CA1B General Purpose Flag  0000 (0)\n+51CA1D Compression Method    0000 (0) 'Stored'\n+51CA1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CA23 CRC                   00000000 (0)\n+51CA27 Compressed Size       00000000 (0)\n+51CA2B Uncompressed Size     00000000 (0)\n+51CA2F Filename Length       0023 (35)\n+51CA31 Extra Length          0009 (9)\n+51CA33 Comment Length        0000 (0)\n+51CA35 Disk Start            0000 (0)\n+51CA37 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CA39 Ext File Attributes   00000000 (0)\n+51CA3D Local Header Offset   000BB784 (767876)\n+51CA41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CA41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CA64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CA66   Length              0005 (5)\n+51CA68   Flags               01 (1) 'Modification'\n+51CA69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CA6D CENTRAL HEADER #291   02014B50 (33639248)\n+51CA71 Created Zip Spec      14 (20) '2.0'\n+51CA72 Created OS            00 (0) 'MS-DOS'\n+51CA73 Extract Zip Spec      14 (20) '2.0'\n+51CA74 Extract OS            00 (0) 'MS-DOS'\n+51CA75 General Purpose Flag  0000 (0)\n+51CA77 Compression Method    0000 (0) 'Stored'\n+51CA79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CA7D CRC                   00000000 (0)\n+51CA81 Compressed Size       00000000 (0)\n+51CA85 Uncompressed Size     00000000 (0)\n+51CA89 Filename Length       002C (44)\n+51CA8B Extra Length          0009 (9)\n+51CA8D Comment Length        0000 (0)\n+51CA8F Disk Start            0000 (0)\n+51CA91 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CA93 Ext File Attributes   00000000 (0)\n+51CA97 Local Header Offset   000BB7CE (767950)\n+51CA9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CA9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CAC7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CAC9   Length              0005 (5)\n+51CACB   Flags               01 (1) 'Modification'\n+51CACC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CAD0 CENTRAL HEADER #292   02014B50 (33639248)\n+51CAD4 Created Zip Spec      14 (20) '2.0'\n+51CAD5 Created OS            00 (0) 'MS-DOS'\n+51CAD6 Extract Zip Spec      14 (20) '2.0'\n+51CAD7 Extract OS            00 (0) 'MS-DOS'\n+51CAD8 General Purpose Flag  0000 (0)\n+51CADA Compression Method    0000 (0) 'Stored'\n+51CADC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CAE0 CRC                   00000000 (0)\n+51CAE4 Compressed Size       00000000 (0)\n+51CAE8 Uncompressed Size     00000000 (0)\n+51CAEC Filename Length       0054 (84)\n+51CAEE Extra Length          0009 (9)\n+51CAF0 Comment Length        0000 (0)\n+51CAF2 Disk Start            0000 (0)\n+51CAF4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CAF6 Ext File Attributes   00000000 (0)\n+51CAFA Local Header Offset   000BB821 (768033)\n+51CAFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CAFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CB52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CB54   Length              0005 (5)\n+51CB56   Flags               01 (1) 'Modification'\n+51CB57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CB5B CENTRAL HEADER #293   02014B50 (33639248)\n+51CB5F Created Zip Spec      14 (20) '2.0'\n+51CB60 Created OS            00 (0) 'MS-DOS'\n+51CB61 Extract Zip Spec      14 (20) '2.0'\n+51CB62 Extract OS            00 (0) 'MS-DOS'\n+51CB63 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51CB65 Compression Method    0000 (0) 'Stored'\n+51CB67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CB6B CRC                   63C353AF (1673745327)\n+51CB6F Compressed Size       00000CF8 (3320)\n+51CB73 Uncompressed Size     00000CF8 (3320)\n+51CB77 Filename Length       006A (106)\n+51CB79 Extra Length          0009 (9)\n+51CB7B Comment Length        0000 (0)\n+51CB7D Disk Start            0000 (0)\n+51CB7F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CB81 Ext File Attributes   00000000 (0)\n+51CB85 Local Header Offset   000BB89C (768156)\n+51CB89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CB89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CBF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CBF5   Length              0005 (5)\n+51CBF7   Flags               01 (1) 'Modification'\n+51CBF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CBFC CENTRAL HEADER #294   02014B50 (33639248)\n+51CC00 Created Zip Spec      14 (20) '2.0'\n+51CC01 Created OS            00 (0) 'MS-DOS'\n+51CC02 Extract Zip Spec      14 (20) '2.0'\n+51CC03 Extract OS            00 (0) 'MS-DOS'\n+51CC04 General Purpose Flag  0000 (0)\n+51CC06 Compression Method    0000 (0) 'Stored'\n+51CC08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CC0C CRC                   00000000 (0)\n+51CC10 Compressed Size       00000000 (0)\n+51CC14 Uncompressed Size     00000000 (0)\n+51CC18 Filename Length       005B (91)\n+51CC1A Extra Length          0009 (9)\n+51CC1C Comment Length        0000 (0)\n+51CC1E Disk Start            0000 (0)\n+51CC20 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CC22 Ext File Attributes   00000000 (0)\n+51CC26 Local Header Offset   000BC635 (771637)\n+51CC2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CC2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CC85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CC87   Length              0005 (5)\n+51CC89   Flags               01 (1) 'Modification'\n+51CC8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CC8E CENTRAL HEADER #295   02014B50 (33639248)\n+51CC92 Created Zip Spec      14 (20) '2.0'\n+51CC93 Created OS            00 (0) 'MS-DOS'\n+51CC94 Extract Zip Spec      14 (20) '2.0'\n+51CC95 Extract OS            00 (0) 'MS-DOS'\n+51CC96 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51CC98 Compression Method    0000 (0) 'Stored'\n+51CC9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CC9E CRC                   C64481A5 (3326378405)\n+51CCA2 Compressed Size       00000723 (1827)\n+51CCA6 Uncompressed Size     00000723 (1827)\n+51CCAA Filename Length       0071 (113)\n+51CCAC Extra Length          0009 (9)\n+51CCAE Comment Length        0000 (0)\n+51CCB0 Disk Start            0000 (0)\n+51CCB2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CCB4 Ext File Attributes   00000000 (0)\n+51CCB8 Local Header Offset   000BC6B7 (771767)\n+51CCBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CCBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CD2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CD2F   Length              0005 (5)\n+51CD31   Flags               01 (1) 'Modification'\n+51CD32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CD36 CENTRAL HEADER #296   02014B50 (33639248)\n+51CD3A Created Zip Spec      14 (20) '2.0'\n+51CD3B Created OS            00 (0) 'MS-DOS'\n+51CD3C Extract Zip Spec      14 (20) '2.0'\n+51CD3D Extract OS            00 (0) 'MS-DOS'\n+51CD3E General Purpose Flag  0000 (0)\n+51CD40 Compression Method    0000 (0) 'Stored'\n+51CD42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CD46 CRC                   00000000 (0)\n+51CD4A Compressed Size       00000000 (0)\n+51CD4E Uncompressed Size     00000000 (0)\n+51CD52 Filename Length       0059 (89)\n+51CD54 Extra Length          0009 (9)\n+51CD56 Comment Length        0000 (0)\n+51CD58 Disk Start            0000 (0)\n+51CD5A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CD5C Ext File Attributes   00000000 (0)\n+51CD60 Local Header Offset   000BCE82 (773762)\n+51CD64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CD64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CDBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CDBF   Length              0005 (5)\n+51CDC1   Flags               01 (1) 'Modification'\n+51CDC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CDC6 CENTRAL HEADER #297   02014B50 (33639248)\n+51CDCA Created Zip Spec      14 (20) '2.0'\n+51CDCB Created OS            00 (0) 'MS-DOS'\n+51CDCC Extract Zip Spec      14 (20) '2.0'\n+51CDCD Extract OS            00 (0) 'MS-DOS'\n+51CDCE General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51CDD0 Compression Method    0000 (0) 'Stored'\n+51CDD2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CDD6 CRC                   39649106 (962892038)\n+51CDDA Compressed Size       000006E2 (1762)\n+51CDDE Uncompressed Size     000006E2 (1762)\n+51CDE2 Filename Length       006F (111)\n+51CDE4 Extra Length          0009 (9)\n+51CDE6 Comment Length        0000 (0)\n+51CDE8 Disk Start            0000 (0)\n+51CDEA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CDEC Ext File Attributes   00000000 (0)\n+51CDF0 Local Header Offset   000BCF02 (773890)\n+51CDF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CDF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CE63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CE65   Length              0005 (5)\n+51CE67   Flags               01 (1) 'Modification'\n+51CE68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CE6C CENTRAL HEADER #298   02014B50 (33639248)\n+51CE70 Created Zip Spec      14 (20) '2.0'\n+51CE71 Created OS            00 (0) 'MS-DOS'\n+51CE72 Extract Zip Spec      14 (20) '2.0'\n+51CE73 Extract OS            00 (0) 'MS-DOS'\n+51CE74 General Purpose Flag  0000 (0)\n+51CE76 Compression Method    0000 (0) 'Stored'\n+51CE78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CE7C CRC                   00000000 (0)\n+51CE80 Compressed Size       00000000 (0)\n+51CE84 Uncompressed Size     00000000 (0)\n+51CE88 Filename Length       0054 (84)\n+51CE8A Extra Length          0009 (9)\n+51CE8C Comment Length        0000 (0)\n+51CE8E Disk Start            0000 (0)\n+51CE90 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CE92 Ext File Attributes   00000000 (0)\n+51CE96 Local Header Offset   000BD68A (775818)\n+51CE9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CE9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CEEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CEF0   Length              0005 (5)\n+51CEF2   Flags               01 (1) 'Modification'\n+51CEF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CEF7 CENTRAL HEADER #299   02014B50 (33639248)\n+51CEFB Created Zip Spec      14 (20) '2.0'\n+51CEFC Created OS            00 (0) 'MS-DOS'\n+51CEFD Extract Zip Spec      14 (20) '2.0'\n+51CEFE Extract OS            00 (0) 'MS-DOS'\n+51CEFF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51CF01 Compression Method    0000 (0) 'Stored'\n+51CF03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CF07 CRC                   8DC8B44C (2378740812)\n+51CF0B Compressed Size       00000782 (1922)\n+51CF0F Uncompressed Size     00000782 (1922)\n+51CF13 Filename Length       006A (106)\n+51CF15 Extra Length          0009 (9)\n+51CF17 Comment Length        0000 (0)\n+51CF19 Disk Start            0000 (0)\n+51CF1B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CF1D Ext File Attributes   00000000 (0)\n+51CF21 Local Header Offset   000BD705 (775941)\n+51CF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CF8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CF91   Length              0005 (5)\n+51CF93   Flags               01 (1) 'Modification'\n+51CF94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CF98 CENTRAL HEADER #300   02014B50 (33639248)\n+51CF9C Created Zip Spec      14 (20) '2.0'\n+51CF9D Created OS            00 (0) 'MS-DOS'\n+51CF9E Extract Zip Spec      14 (20) '2.0'\n+51CF9F Extract OS            00 (0) 'MS-DOS'\n+51CFA0 General Purpose Flag  0000 (0)\n+51CFA2 Compression Method    0000 (0) 'Stored'\n+51CFA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51CFA8 CRC                   00000000 (0)\n+51CFAC Compressed Size       00000000 (0)\n+51CFB0 Uncompressed Size     00000000 (0)\n+51CFB4 Filename Length       0025 (37)\n+51CFB6 Extra Length          0009 (9)\n+51CFB8 Comment Length        0000 (0)\n+51CFBA Disk Start            0000 (0)\n+51CFBC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51CFBE Ext File Attributes   00000000 (0)\n+51CFC2 Local Header Offset   000BDF28 (778024)\n+51CFC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51CFC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51CFEB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51CFED   Length              0005 (5)\n+51CFEF   Flags               01 (1) 'Modification'\n+51CFF0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51CFF4 CENTRAL HEADER #301   02014B50 (33639248)\n+51CFF8 Created Zip Spec      14 (20) '2.0'\n+51CFF9 Created OS            00 (0) 'MS-DOS'\n+51CFFA Extract Zip Spec      14 (20) '2.0'\n+51CFFB Extract OS            00 (0) 'MS-DOS'\n+51CFFC General Purpose Flag  0000 (0)\n+51CFFE Compression Method    0000 (0) 'Stored'\n+51D000 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D004 CRC                   00000000 (0)\n+51D008 Compressed Size       00000000 (0)\n+51D00C Uncompressed Size     00000000 (0)\n+51D010 Filename Length       002E (46)\n+51D012 Extra Length          0009 (9)\n+51D014 Comment Length        0000 (0)\n+51D016 Disk Start            0000 (0)\n+51D018 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D01A Ext File Attributes   00000000 (0)\n+51D01E Local Header Offset   000BDF74 (778100)\n+51D022 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D022: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D050 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D052   Length              0005 (5)\n+51D054   Flags               01 (1) 'Modification'\n+51D055   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D059 CENTRAL HEADER #302   02014B50 (33639248)\n+51D05D Created Zip Spec      14 (20) '2.0'\n+51D05E Created OS            00 (0) 'MS-DOS'\n+51D05F Extract Zip Spec      14 (20) '2.0'\n+51D060 Extract OS            00 (0) 'MS-DOS'\n+51D061 General Purpose Flag  0000 (0)\n+51D063 Compression Method    0000 (0) 'Stored'\n+51D065 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D069 CRC                   00000000 (0)\n+51D06D Compressed Size       00000000 (0)\n+51D071 Uncompressed Size     00000000 (0)\n+51D075 Filename Length       005E (94)\n+51D077 Extra Length          0009 (9)\n+51D079 Comment Length        0000 (0)\n+51D07B Disk Start            0000 (0)\n+51D07D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D07F Ext File Attributes   00000000 (0)\n+51D083 Local Header Offset   000BDFC9 (778185)\n+51D087 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D087: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D0E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D0E7   Length              0005 (5)\n+51D0E9   Flags               01 (1) 'Modification'\n+51D0EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D0EE CENTRAL HEADER #303   02014B50 (33639248)\n+51D0F2 Created Zip Spec      14 (20) '2.0'\n+51D0F3 Created OS            00 (0) 'MS-DOS'\n+51D0F4 Extract Zip Spec      14 (20) '2.0'\n+51D0F5 Extract OS            00 (0) 'MS-DOS'\n+51D0F6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D0F8 Compression Method    0000 (0) 'Stored'\n+51D0FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D0FE CRC                   335CA1CD (861708749)\n+51D102 Compressed Size       00000E9A (3738)\n+51D106 Uncompressed Size     00000E9A (3738)\n+51D10A Filename Length       0074 (116)\n+51D10C Extra Length          0009 (9)\n+51D10E Comment Length        0000 (0)\n+51D110 Disk Start            0000 (0)\n+51D112 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D114 Ext File Attributes   00000000 (0)\n+51D118 Local Header Offset   000BE04E (778318)\n+51D11C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D11C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D190 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D192   Length              0005 (5)\n+51D194   Flags               01 (1) 'Modification'\n+51D195   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D199 CENTRAL HEADER #304   02014B50 (33639248)\n+51D19D Created Zip Spec      14 (20) '2.0'\n+51D19E Created OS            00 (0) 'MS-DOS'\n+51D19F Extract Zip Spec      14 (20) '2.0'\n+51D1A0 Extract OS            00 (0) 'MS-DOS'\n+51D1A1 General Purpose Flag  0000 (0)\n+51D1A3 Compression Method    0000 (0) 'Stored'\n+51D1A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D1A9 CRC                   00000000 (0)\n+51D1AD Compressed Size       00000000 (0)\n+51D1B1 Uncompressed Size     00000000 (0)\n+51D1B5 Filename Length       006A (106)\n+51D1B7 Extra Length          0009 (9)\n+51D1B9 Comment Length        0000 (0)\n+51D1BB Disk Start            0000 (0)\n+51D1BD Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D1BF Ext File Attributes   00000000 (0)\n+51D1C3 Local Header Offset   000BEF93 (782227)\n+51D1C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D1C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D231 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D233   Length              0005 (5)\n+51D235   Flags               01 (1) 'Modification'\n+51D236   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D23A CENTRAL HEADER #305   02014B50 (33639248)\n+51D23E Created Zip Spec      14 (20) '2.0'\n+51D23F Created OS            00 (0) 'MS-DOS'\n+51D240 Extract Zip Spec      14 (20) '2.0'\n+51D241 Extract OS            00 (0) 'MS-DOS'\n+51D242 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D244 Compression Method    0000 (0) 'Stored'\n+51D246 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D24A CRC                   3EE7FDDD (1055391197)\n+51D24E Compressed Size       00001059 (4185)\n+51D252 Uncompressed Size     00001059 (4185)\n+51D256 Filename Length       0080 (128)\n+51D258 Extra Length          0009 (9)\n+51D25A Comment Length        0000 (0)\n+51D25C Disk Start            0000 (0)\n+51D25E Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D260 Ext File Attributes   00000000 (0)\n+51D264 Local Header Offset   000BF024 (782372)\n+51D268 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D268: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D2E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D2EA   Length              0005 (5)\n+51D2EC   Flags               01 (1) 'Modification'\n+51D2ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D2F1 CENTRAL HEADER #306   02014B50 (33639248)\n+51D2F5 Created Zip Spec      14 (20) '2.0'\n+51D2F6 Created OS            00 (0) 'MS-DOS'\n+51D2F7 Extract Zip Spec      14 (20) '2.0'\n+51D2F8 Extract OS            00 (0) 'MS-DOS'\n+51D2F9 General Purpose Flag  0000 (0)\n+51D2FB Compression Method    0000 (0) 'Stored'\n+51D2FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D301 CRC                   00000000 (0)\n+51D305 Compressed Size       00000000 (0)\n+51D309 Uncompressed Size     00000000 (0)\n+51D30D Filename Length       0027 (39)\n+51D30F Extra Length          0009 (9)\n+51D311 Comment Length        0000 (0)\n+51D313 Disk Start            0000 (0)\n+51D315 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D317 Ext File Attributes   00000000 (0)\n+51D31B Local Header Offset   000C0134 (786740)\n+51D31F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D31F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D346 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D348   Length              0005 (5)\n+51D34A   Flags               01 (1) 'Modification'\n+51D34B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D34F CENTRAL HEADER #307   02014B50 (33639248)\n+51D353 Created Zip Spec      14 (20) '2.0'\n+51D354 Created OS            00 (0) 'MS-DOS'\n+51D355 Extract Zip Spec      14 (20) '2.0'\n+51D356 Extract OS            00 (0) 'MS-DOS'\n+51D357 General Purpose Flag  0000 (0)\n+51D359 Compression Method    0000 (0) 'Stored'\n+51D35B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D35F CRC                   00000000 (0)\n+51D363 Compressed Size       00000000 (0)\n+51D367 Uncompressed Size     00000000 (0)\n+51D36B Filename Length       0030 (48)\n+51D36D Extra Length          0009 (9)\n+51D36F Comment Length        0000 (0)\n+51D371 Disk Start            0000 (0)\n+51D373 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D375 Ext File Attributes   00000000 (0)\n+51D379 Local Header Offset   000C0182 (786818)\n+51D37D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D37D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D3AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D3AF   Length              0005 (5)\n+51D3B1   Flags               01 (1) 'Modification'\n+51D3B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D3B6 CENTRAL HEADER #308   02014B50 (33639248)\n+51D3BA Created Zip Spec      14 (20) '2.0'\n+51D3BB Created OS            00 (0) 'MS-DOS'\n+51D3BC Extract Zip Spec      14 (20) '2.0'\n+51D3BD Extract OS            00 (0) 'MS-DOS'\n+51D3BE General Purpose Flag  0000 (0)\n+51D3C0 Compression Method    0000 (0) 'Stored'\n+51D3C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D3C6 CRC                   00000000 (0)\n+51D3CA Compressed Size       00000000 (0)\n+51D3CE Uncompressed Size     00000000 (0)\n+51D3D2 Filename Length       0069 (105)\n+51D3D4 Extra Length          0009 (9)\n+51D3D6 Comment Length        0000 (0)\n+51D3D8 Disk Start            0000 (0)\n+51D3DA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D3DC Ext File Attributes   00000000 (0)\n+51D3E0 Local Header Offset   000C01D9 (786905)\n+51D3E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D3E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D44D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D44F   Length              0005 (5)\n+51D451   Flags               01 (1) 'Modification'\n+51D452   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D456 CENTRAL HEADER #309   02014B50 (33639248)\n+51D45A Created Zip Spec      14 (20) '2.0'\n+51D45B Created OS            00 (0) 'MS-DOS'\n+51D45C Extract Zip Spec      14 (20) '2.0'\n+51D45D Extract OS            00 (0) 'MS-DOS'\n+51D45E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D460 Compression Method    0000 (0) 'Stored'\n+51D462 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D466 CRC                   67FA3A91 (1744452241)\n+51D46A Compressed Size       00000C5B (3163)\n+51D46E Uncompressed Size     00000C5B (3163)\n+51D472 Filename Length       007F (127)\n+51D474 Extra Length          0009 (9)\n+51D476 Comment Length        0000 (0)\n+51D478 Disk Start            0000 (0)\n+51D47A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D47C Ext File Attributes   00000000 (0)\n+51D480 Local Header Offset   000C0269 (787049)\n+51D484 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D484: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D503 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D505   Length              0005 (5)\n+51D507   Flags               01 (1) 'Modification'\n+51D508   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D50C CENTRAL HEADER #310   02014B50 (33639248)\n+51D510 Created Zip Spec      14 (20) '2.0'\n+51D511 Created OS            00 (0) 'MS-DOS'\n+51D512 Extract Zip Spec      14 (20) '2.0'\n+51D513 Extract OS            00 (0) 'MS-DOS'\n+51D514 General Purpose Flag  0000 (0)\n+51D516 Compression Method    0000 (0) 'Stored'\n+51D518 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D51C CRC                   00000000 (0)\n+51D520 Compressed Size       00000000 (0)\n+51D524 Uncompressed Size     00000000 (0)\n+51D528 Filename Length       0069 (105)\n+51D52A Extra Length          0009 (9)\n+51D52C Comment Length        0000 (0)\n+51D52E Disk Start            0000 (0)\n+51D530 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D532 Ext File Attributes   00000000 (0)\n+51D536 Local Header Offset   000C0F7A (790394)\n+51D53A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D53A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D5A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D5A5   Length              0005 (5)\n+51D5A7   Flags               01 (1) 'Modification'\n+51D5A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D5AC CENTRAL HEADER #311   02014B50 (33639248)\n+51D5B0 Created Zip Spec      14 (20) '2.0'\n+51D5B1 Created OS            00 (0) 'MS-DOS'\n+51D5B2 Extract Zip Spec      14 (20) '2.0'\n+51D5B3 Extract OS            00 (0) 'MS-DOS'\n+51D5B4 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D5B6 Compression Method    0000 (0) 'Stored'\n+51D5B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D5BC CRC                   63513D5C (1666268508)\n+51D5C0 Compressed Size       000007C0 (1984)\n+51D5C4 Uncompressed Size     000007C0 (1984)\n+51D5C8 Filename Length       007F (127)\n+51D5CA Extra Length          0009 (9)\n+51D5CC Comment Length        0000 (0)\n+51D5CE Disk Start            0000 (0)\n+51D5D0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D5D2 Ext File Attributes   00000000 (0)\n+51D5D6 Local Header Offset   000C100A (790538)\n+51D5DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D5DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D659 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D65B   Length              0005 (5)\n+51D65D   Flags               01 (1) 'Modification'\n+51D65E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D662 CENTRAL HEADER #312   02014B50 (33639248)\n+51D666 Created Zip Spec      14 (20) '2.0'\n+51D667 Created OS            00 (0) 'MS-DOS'\n+51D668 Extract Zip Spec      14 (20) '2.0'\n+51D669 Extract OS            00 (0) 'MS-DOS'\n+51D66A General Purpose Flag  0000 (0)\n+51D66C Compression Method    0000 (0) 'Stored'\n+51D66E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D672 CRC                   00000000 (0)\n+51D676 Compressed Size       00000000 (0)\n+51D67A Uncompressed Size     00000000 (0)\n+51D67E Filename Length       0060 (96)\n+51D680 Extra Length          0009 (9)\n+51D682 Comment Length        0000 (0)\n+51D684 Disk Start            0000 (0)\n+51D686 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D688 Ext File Attributes   00000000 (0)\n+51D68C Local Header Offset   000C1880 (792704)\n+51D690 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D690: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D6F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D6F2   Length              0005 (5)\n+51D6F4   Flags               01 (1) 'Modification'\n+51D6F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D6F9 CENTRAL HEADER #313   02014B50 (33639248)\n+51D6FD Created Zip Spec      14 (20) '2.0'\n+51D6FE Created OS            00 (0) 'MS-DOS'\n+51D6FF Extract Zip Spec      14 (20) '2.0'\n+51D700 Extract OS            00 (0) 'MS-DOS'\n+51D701 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D703 Compression Method    0000 (0) 'Stored'\n+51D705 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D709 CRC                   99929518 (2576520472)\n+51D70D Compressed Size       00000EDA (3802)\n+51D711 Uncompressed Size     00000EDA (3802)\n+51D715 Filename Length       0076 (118)\n+51D717 Extra Length          0009 (9)\n+51D719 Comment Length        0000 (0)\n+51D71B Disk Start            0000 (0)\n+51D71D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D71F Ext File Attributes   00000000 (0)\n+51D723 Local Header Offset   000C1907 (792839)\n+51D727 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D727: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D79D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D79F   Length              0005 (5)\n+51D7A1   Flags               01 (1) 'Modification'\n+51D7A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D7A6 CENTRAL HEADER #314   02014B50 (33639248)\n+51D7AA Created Zip Spec      14 (20) '2.0'\n+51D7AB Created OS            00 (0) 'MS-DOS'\n+51D7AC Extract Zip Spec      14 (20) '2.0'\n+51D7AD Extract OS            00 (0) 'MS-DOS'\n+51D7AE General Purpose Flag  0000 (0)\n+51D7B0 Compression Method    0000 (0) 'Stored'\n+51D7B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D7B6 CRC                   00000000 (0)\n+51D7BA Compressed Size       00000000 (0)\n+51D7BE Uncompressed Size     00000000 (0)\n+51D7C2 Filename Length       005E (94)\n+51D7C4 Extra Length          0009 (9)\n+51D7C6 Comment Length        0000 (0)\n+51D7C8 Disk Start            0000 (0)\n+51D7CA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D7CC Ext File Attributes   00000000 (0)\n+51D7D0 Local Header Offset   000C288E (796814)\n+51D7D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D7D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D834   Length              0005 (5)\n+51D836   Flags               01 (1) 'Modification'\n+51D837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D83B CENTRAL HEADER #315   02014B50 (33639248)\n+51D83F Created Zip Spec      14 (20) '2.0'\n+51D840 Created OS            00 (0) 'MS-DOS'\n+51D841 Extract Zip Spec      14 (20) '2.0'\n+51D842 Extract OS            00 (0) 'MS-DOS'\n+51D843 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D845 Compression Method    0000 (0) 'Stored'\n+51D847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D84B CRC                   E6BF62E0 (3871302368)\n+51D84F Compressed Size       000008F8 (2296)\n+51D853 Uncompressed Size     000008F8 (2296)\n+51D857 Filename Length       0074 (116)\n+51D859 Extra Length          0009 (9)\n+51D85B Comment Length        0000 (0)\n+51D85D Disk Start            0000 (0)\n+51D85F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D861 Ext File Attributes   00000000 (0)\n+51D865 Local Header Offset   000C2913 (796947)\n+51D869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D8DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D8DF   Length              0005 (5)\n+51D8E1   Flags               01 (1) 'Modification'\n+51D8E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D8E6 CENTRAL HEADER #316   02014B50 (33639248)\n+51D8EA Created Zip Spec      14 (20) '2.0'\n+51D8EB Created OS            00 (0) 'MS-DOS'\n+51D8EC Extract Zip Spec      14 (20) '2.0'\n+51D8ED Extract OS            00 (0) 'MS-DOS'\n+51D8EE General Purpose Flag  0000 (0)\n+51D8F0 Compression Method    0000 (0) 'Stored'\n+51D8F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D8F6 CRC                   00000000 (0)\n+51D8FA Compressed Size       00000000 (0)\n+51D8FE Uncompressed Size     00000000 (0)\n+51D902 Filename Length       0065 (101)\n+51D904 Extra Length          0009 (9)\n+51D906 Comment Length        0000 (0)\n+51D908 Disk Start            0000 (0)\n+51D90A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D90C Ext File Attributes   00000000 (0)\n+51D910 Local Header Offset   000C32B6 (799414)\n+51D914 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D914: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51D979 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51D97B   Length              0005 (5)\n+51D97D   Flags               01 (1) 'Modification'\n+51D97E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51D982 CENTRAL HEADER #317   02014B50 (33639248)\n+51D986 Created Zip Spec      14 (20) '2.0'\n+51D987 Created OS            00 (0) 'MS-DOS'\n+51D988 Extract Zip Spec      14 (20) '2.0'\n+51D989 Extract OS            00 (0) 'MS-DOS'\n+51D98A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51D98C Compression Method    0000 (0) 'Stored'\n+51D98E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51D992 CRC                   F05E2331 (4032701233)\n+51D996 Compressed Size       00000831 (2097)\n+51D99A Uncompressed Size     00000831 (2097)\n+51D99E Filename Length       007B (123)\n+51D9A0 Extra Length          0009 (9)\n+51D9A2 Comment Length        0000 (0)\n+51D9A4 Disk Start            0000 (0)\n+51D9A6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51D9A8 Ext File Attributes   00000000 (0)\n+51D9AC Local Header Offset   000C3342 (799554)\n+51D9B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51D9B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DA2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DA2D   Length              0005 (5)\n+51DA2F   Flags               01 (1) 'Modification'\n+51DA30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DA34 CENTRAL HEADER #318   02014B50 (33639248)\n+51DA38 Created Zip Spec      14 (20) '2.0'\n+51DA39 Created OS            00 (0) 'MS-DOS'\n+51DA3A Extract Zip Spec      14 (20) '2.0'\n+51DA3B Extract OS            00 (0) 'MS-DOS'\n+51DA3C General Purpose Flag  0000 (0)\n+51DA3E Compression Method    0000 (0) 'Stored'\n+51DA40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DA44 CRC                   00000000 (0)\n+51DA48 Compressed Size       00000000 (0)\n+51DA4C Uncompressed Size     00000000 (0)\n+51DA50 Filename Length       0063 (99)\n+51DA52 Extra Length          0009 (9)\n+51DA54 Comment Length        0000 (0)\n+51DA56 Disk Start            0000 (0)\n+51DA58 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DA5A Ext File Attributes   00000000 (0)\n+51DA5E Local Header Offset   000C3C25 (801829)\n+51DA62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DA62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DAC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DAC7   Length              0005 (5)\n+51DAC9   Flags               01 (1) 'Modification'\n+51DACA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DACE CENTRAL HEADER #319   02014B50 (33639248)\n+51DAD2 Created Zip Spec      14 (20) '2.0'\n+51DAD3 Created OS            00 (0) 'MS-DOS'\n+51DAD4 Extract Zip Spec      14 (20) '2.0'\n+51DAD5 Extract OS            00 (0) 'MS-DOS'\n+51DAD6 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51DAD8 Compression Method    0000 (0) 'Stored'\n+51DADA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DADE CRC                   80ED3BA4 (2163030948)\n+51DAE2 Compressed Size       000015D0 (5584)\n+51DAE6 Uncompressed Size     000015D0 (5584)\n+51DAEA Filename Length       0079 (121)\n+51DAEC Extra Length          0009 (9)\n+51DAEE Comment Length        0000 (0)\n+51DAF0 Disk Start            0000 (0)\n+51DAF2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DAF4 Ext File Attributes   00000000 (0)\n+51DAF8 Local Header Offset   000C3CAF (801967)\n+51DAFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DAFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DB75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DB77   Length              0005 (5)\n+51DB79   Flags               01 (1) 'Modification'\n+51DB7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DB7E CENTRAL HEADER #320   02014B50 (33639248)\n+51DB82 Created Zip Spec      14 (20) '2.0'\n+51DB83 Created OS            00 (0) 'MS-DOS'\n+51DB84 Extract Zip Spec      14 (20) '2.0'\n+51DB85 Extract OS            00 (0) 'MS-DOS'\n+51DB86 General Purpose Flag  0000 (0)\n+51DB88 Compression Method    0000 (0) 'Stored'\n+51DB8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DB8E CRC                   00000000 (0)\n+51DB92 Compressed Size       00000000 (0)\n+51DB96 Uncompressed Size     00000000 (0)\n+51DB9A Filename Length       0069 (105)\n+51DB9C Extra Length          0009 (9)\n+51DB9E Comment Length        0000 (0)\n+51DBA0 Disk Start            0000 (0)\n+51DBA2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DBA4 Ext File Attributes   00000000 (0)\n+51DBA8 Local Header Offset   000C532F (807727)\n+51DBAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DBAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DC15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DC17   Length              0005 (5)\n+51DC19   Flags               01 (1) 'Modification'\n+51DC1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DC1E CENTRAL HEADER #321   02014B50 (33639248)\n+51DC22 Created Zip Spec      14 (20) '2.0'\n+51DC23 Created OS            00 (0) 'MS-DOS'\n+51DC24 Extract Zip Spec      14 (20) '2.0'\n+51DC25 Extract OS            00 (0) 'MS-DOS'\n+51DC26 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51DC28 Compression Method    0000 (0) 'Stored'\n+51DC2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DC2E CRC                   7018E446 (1880679494)\n+51DC32 Compressed Size       00001FAE (8110)\n+51DC36 Uncompressed Size     00001FAE (8110)\n+51DC3A Filename Length       007F (127)\n+51DC3C Extra Length          0009 (9)\n+51DC3E Comment Length        0000 (0)\n+51DC40 Disk Start            0000 (0)\n+51DC42 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DC44 Ext File Attributes   00000000 (0)\n+51DC48 Local Header Offset   000C53BF (807871)\n+51DC4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DC4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DCCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DCCD   Length              0005 (5)\n+51DCCF   Flags               01 (1) 'Modification'\n+51DCD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DCD4 CENTRAL HEADER #322   02014B50 (33639248)\n+51DCD8 Created Zip Spec      14 (20) '2.0'\n+51DCD9 Created OS            00 (0) 'MS-DOS'\n+51DCDA Extract Zip Spec      14 (20) '2.0'\n+51DCDB Extract OS            00 (0) 'MS-DOS'\n+51DCDC General Purpose Flag  0000 (0)\n+51DCDE Compression Method    0000 (0) 'Stored'\n+51DCE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DCE4 CRC                   00000000 (0)\n+51DCE8 Compressed Size       00000000 (0)\n+51DCEC Uncompressed Size     00000000 (0)\n+51DCF0 Filename Length       0060 (96)\n+51DCF2 Extra Length          0009 (9)\n+51DCF4 Comment Length        0000 (0)\n+51DCF6 Disk Start            0000 (0)\n+51DCF8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DCFA Ext File Attributes   00000000 (0)\n+51DCFE Local Header Offset   000C7423 (816163)\n+51DD02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DD02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DD62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DD64   Length              0005 (5)\n+51DD66   Flags               01 (1) 'Modification'\n+51DD67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DD6B CENTRAL HEADER #323   02014B50 (33639248)\n+51DD6F Created Zip Spec      14 (20) '2.0'\n+51DD70 Created OS            00 (0) 'MS-DOS'\n+51DD71 Extract Zip Spec      14 (20) '2.0'\n+51DD72 Extract OS            00 (0) 'MS-DOS'\n+51DD73 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51DD75 Compression Method    0000 (0) 'Stored'\n+51DD77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DD7B CRC                   61A0CE5A (1637928538)\n+51DD7F Compressed Size       000012FA (4858)\n+51DD83 Uncompressed Size     000012FA (4858)\n+51DD87 Filename Length       0076 (118)\n+51DD89 Extra Length          0009 (9)\n+51DD8B Comment Length        0000 (0)\n+51DD8D Disk Start            0000 (0)\n+51DD8F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DD91 Ext File Attributes   00000000 (0)\n+51DD95 Local Header Offset   000C74AA (816298)\n+51DD99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DD99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DE0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DE11   Length              0005 (5)\n+51DE13   Flags               01 (1) 'Modification'\n+51DE14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DE18 CENTRAL HEADER #324   02014B50 (33639248)\n+51DE1C Created Zip Spec      14 (20) '2.0'\n+51DE1D Created OS            00 (0) 'MS-DOS'\n+51DE1E Extract Zip Spec      14 (20) '2.0'\n+51DE1F Extract OS            00 (0) 'MS-DOS'\n+51DE20 General Purpose Flag  0000 (0)\n+51DE22 Compression Method    0000 (0) 'Stored'\n+51DE24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DE28 CRC                   00000000 (0)\n+51DE2C Compressed Size       00000000 (0)\n+51DE30 Uncompressed Size     00000000 (0)\n+51DE34 Filename Length       0063 (99)\n+51DE36 Extra Length          0009 (9)\n+51DE38 Comment Length        0000 (0)\n+51DE3A Disk Start            0000 (0)\n+51DE3C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DE3E Ext File Attributes   00000000 (0)\n+51DE42 Local Header Offset   000C8851 (821329)\n+51DE46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DE46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DEA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DEAB   Length              0005 (5)\n+51DEAD   Flags               01 (1) 'Modification'\n+51DEAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DEB2 CENTRAL HEADER #325   02014B50 (33639248)\n+51DEB6 Created Zip Spec      14 (20) '2.0'\n+51DEB7 Created OS            00 (0) 'MS-DOS'\n+51DEB8 Extract Zip Spec      14 (20) '2.0'\n+51DEB9 Extract OS            00 (0) 'MS-DOS'\n+51DEBA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51DEBC Compression Method    0000 (0) 'Stored'\n+51DEBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DEC2 CRC                   5A804AEF (1518357231)\n+51DEC6 Compressed Size       00001311 (4881)\n+51DECA Uncompressed Size     00001311 (4881)\n+51DECE Filename Length       0079 (121)\n+51DED0 Extra Length          0009 (9)\n+51DED2 Comment Length        0000 (0)\n+51DED4 Disk Start            0000 (0)\n+51DED6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DED8 Ext File Attributes   00000000 (0)\n+51DEDC Local Header Offset   000C88DB (821467)\n+51DEE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DEE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DF59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DF5B   Length              0005 (5)\n+51DF5D   Flags               01 (1) 'Modification'\n+51DF5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DF62 CENTRAL HEADER #326   02014B50 (33639248)\n+51DF66 Created Zip Spec      14 (20) '2.0'\n+51DF67 Created OS            00 (0) 'MS-DOS'\n+51DF68 Extract Zip Spec      14 (20) '2.0'\n+51DF69 Extract OS            00 (0) 'MS-DOS'\n+51DF6A General Purpose Flag  0000 (0)\n+51DF6C Compression Method    0000 (0) 'Stored'\n+51DF6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51DF72 CRC                   00000000 (0)\n+51DF76 Compressed Size       00000000 (0)\n+51DF7A Uncompressed Size     00000000 (0)\n+51DF7E Filename Length       005F (95)\n+51DF80 Extra Length          0009 (9)\n+51DF82 Comment Length        0000 (0)\n+51DF84 Disk Start            0000 (0)\n+51DF86 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51DF88 Ext File Attributes   00000000 (0)\n+51DF8C Local Header Offset   000C9C9C (826524)\n+51DF90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51DF90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51DFEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51DFF1   Length              0005 (5)\n+51DFF3   Flags               01 (1) 'Modification'\n+51DFF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51DFF8 CENTRAL HEADER #327   02014B50 (33639248)\n+51DFFC Created Zip Spec      14 (20) '2.0'\n+51DFFD Created OS            00 (0) 'MS-DOS'\n+51DFFE Extract Zip Spec      14 (20) '2.0'\n+51DFFF Extract OS            00 (0) 'MS-DOS'\n+51E000 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E002 Compression Method    0000 (0) 'Stored'\n+51E004 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E008 CRC                   F4A07CA3 (4104158371)\n+51E00C Compressed Size       000027E4 (10212)\n+51E010 Uncompressed Size     000027E4 (10212)\n+51E014 Filename Length       0075 (117)\n+51E016 Extra Length          0009 (9)\n+51E018 Comment Length        0000 (0)\n+51E01A Disk Start            0000 (0)\n+51E01C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E01E Ext File Attributes   00000000 (0)\n+51E022 Local Header Offset   000C9D22 (826658)\n+51E026 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E026: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E09B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E09D   Length              0005 (5)\n+51E09F   Flags               01 (1) 'Modification'\n+51E0A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E0A4 CENTRAL HEADER #328   02014B50 (33639248)\n+51E0A8 Created Zip Spec      14 (20) '2.0'\n+51E0A9 Created OS            00 (0) 'MS-DOS'\n+51E0AA Extract Zip Spec      14 (20) '2.0'\n+51E0AB Extract OS            00 (0) 'MS-DOS'\n+51E0AC General Purpose Flag  0000 (0)\n+51E0AE Compression Method    0000 (0) 'Stored'\n+51E0B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E0B4 CRC                   00000000 (0)\n+51E0B8 Compressed Size       00000000 (0)\n+51E0BC Uncompressed Size     00000000 (0)\n+51E0C0 Filename Length       0067 (103)\n+51E0C2 Extra Length          0009 (9)\n+51E0C4 Comment Length        0000 (0)\n+51E0C6 Disk Start            0000 (0)\n+51E0C8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E0CA Ext File Attributes   00000000 (0)\n+51E0CE Local Header Offset   000CC5B2 (837042)\n+51E0D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E0D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E139 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E13B   Length              0005 (5)\n+51E13D   Flags               01 (1) 'Modification'\n+51E13E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E142 CENTRAL HEADER #329   02014B50 (33639248)\n+51E146 Created Zip Spec      14 (20) '2.0'\n+51E147 Created OS            00 (0) 'MS-DOS'\n+51E148 Extract Zip Spec      14 (20) '2.0'\n+51E149 Extract OS            00 (0) 'MS-DOS'\n+51E14A General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E14C Compression Method    0000 (0) 'Stored'\n+51E14E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E152 CRC                   6E031E40 (1845698112)\n+51E156 Compressed Size       00001276 (4726)\n+51E15A Uncompressed Size     00001276 (4726)\n+51E15E Filename Length       007D (125)\n+51E160 Extra Length          0009 (9)\n+51E162 Comment Length        0000 (0)\n+51E164 Disk Start            0000 (0)\n+51E166 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E168 Ext File Attributes   00000000 (0)\n+51E16C Local Header Offset   000CC640 (837184)\n+51E170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E1ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E1EF   Length              0005 (5)\n+51E1F1   Flags               01 (1) 'Modification'\n+51E1F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E1F6 CENTRAL HEADER #330   02014B50 (33639248)\n+51E1FA Created Zip Spec      14 (20) '2.0'\n+51E1FB Created OS            00 (0) 'MS-DOS'\n+51E1FC Extract Zip Spec      14 (20) '2.0'\n+51E1FD Extract OS            00 (0) 'MS-DOS'\n+51E1FE General Purpose Flag  0000 (0)\n+51E200 Compression Method    0000 (0) 'Stored'\n+51E202 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E206 CRC                   00000000 (0)\n+51E20A Compressed Size       00000000 (0)\n+51E20E Uncompressed Size     00000000 (0)\n+51E212 Filename Length       0066 (102)\n+51E214 Extra Length          0009 (9)\n+51E216 Comment Length        0000 (0)\n+51E218 Disk Start            0000 (0)\n+51E21A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E21C Ext File Attributes   00000000 (0)\n+51E220 Local Header Offset   000CD96A (842090)\n+51E224 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E224: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E28A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E28C   Length              0005 (5)\n+51E28E   Flags               01 (1) 'Modification'\n+51E28F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E293 CENTRAL HEADER #331   02014B50 (33639248)\n+51E297 Created Zip Spec      14 (20) '2.0'\n+51E298 Created OS            00 (0) 'MS-DOS'\n+51E299 Extract Zip Spec      14 (20) '2.0'\n+51E29A Extract OS            00 (0) 'MS-DOS'\n+51E29B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E29D Compression Method    0000 (0) 'Stored'\n+51E29F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E2A3 CRC                   5987930A (1502057226)\n+51E2A7 Compressed Size       00000BDE (3038)\n+51E2AB Uncompressed Size     00000BDE (3038)\n+51E2AF Filename Length       007C (124)\n+51E2B1 Extra Length          0009 (9)\n+51E2B3 Comment Length        0000 (0)\n+51E2B5 Disk Start            0000 (0)\n+51E2B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E2B9 Ext File Attributes   00000000 (0)\n+51E2BD Local Header Offset   000CD9F7 (842231)\n+51E2C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E2C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E33D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E33F   Length              0005 (5)\n+51E341   Flags               01 (1) 'Modification'\n+51E342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E346 CENTRAL HEADER #332   02014B50 (33639248)\n+51E34A Created Zip Spec      14 (20) '2.0'\n+51E34B Created OS            00 (0) 'MS-DOS'\n+51E34C Extract Zip Spec      14 (20) '2.0'\n+51E34D Extract OS            00 (0) 'MS-DOS'\n+51E34E General Purpose Flag  0000 (0)\n+51E350 Compression Method    0000 (0) 'Stored'\n+51E352 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E356 CRC                   00000000 (0)\n+51E35A Compressed Size       00000000 (0)\n+51E35E Uncompressed Size     00000000 (0)\n+51E362 Filename Length       0067 (103)\n+51E364 Extra Length          0009 (9)\n+51E366 Comment Length        0000 (0)\n+51E368 Disk Start            0000 (0)\n+51E36A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E36C Ext File Attributes   00000000 (0)\n+51E370 Local Header Offset   000CE688 (845448)\n+51E374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E3DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E3DD   Length              0005 (5)\n+51E3DF   Flags               01 (1) 'Modification'\n+51E3E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E3E4 CENTRAL HEADER #333   02014B50 (33639248)\n+51E3E8 Created Zip Spec      14 (20) '2.0'\n+51E3E9 Created OS            00 (0) 'MS-DOS'\n+51E3EA Extract Zip Spec      14 (20) '2.0'\n+51E3EB Extract OS            00 (0) 'MS-DOS'\n+51E3EC General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E3EE Compression Method    0000 (0) 'Stored'\n+51E3F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E3F4 CRC                   CA93F7B9 (3398694841)\n+51E3F8 Compressed Size       000008CF (2255)\n+51E3FC Uncompressed Size     000008CF (2255)\n+51E400 Filename Length       007D (125)\n+51E402 Extra Length          0009 (9)\n+51E404 Comment Length        0000 (0)\n+51E406 Disk Start            0000 (0)\n+51E408 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E40A Ext File Attributes   00000000 (0)\n+51E40E Local Header Offset   000CE716 (845590)\n+51E412 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E412: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E48F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E491   Length              0005 (5)\n+51E493   Flags               01 (1) 'Modification'\n+51E494   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E498 CENTRAL HEADER #334   02014B50 (33639248)\n+51E49C Created Zip Spec      14 (20) '2.0'\n+51E49D Created OS            00 (0) 'MS-DOS'\n+51E49E Extract Zip Spec      14 (20) '2.0'\n+51E49F Extract OS            00 (0) 'MS-DOS'\n+51E4A0 General Purpose Flag  0000 (0)\n+51E4A2 Compression Method    0000 (0) 'Stored'\n+51E4A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E4A8 CRC                   00000000 (0)\n+51E4AC Compressed Size       00000000 (0)\n+51E4B0 Uncompressed Size     00000000 (0)\n+51E4B4 Filename Length       0065 (101)\n+51E4B6 Extra Length          0009 (9)\n+51E4B8 Comment Length        0000 (0)\n+51E4BA Disk Start            0000 (0)\n+51E4BC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E4BE Ext File Attributes   00000000 (0)\n+51E4C2 Local Header Offset   000CF099 (848025)\n+51E4C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E4C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E52B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E52D   Length              0005 (5)\n+51E52F   Flags               01 (1) 'Modification'\n+51E530   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E534 CENTRAL HEADER #335   02014B50 (33639248)\n+51E538 Created Zip Spec      14 (20) '2.0'\n+51E539 Created OS            00 (0) 'MS-DOS'\n+51E53A Extract Zip Spec      14 (20) '2.0'\n+51E53B Extract OS            00 (0) 'MS-DOS'\n+51E53C General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E53E Compression Method    0000 (0) 'Stored'\n+51E540 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E544 CRC                   673E5975 (1732139381)\n+51E548 Compressed Size       00000CA9 (3241)\n+51E54C Uncompressed Size     00000CA9 (3241)\n+51E550 Filename Length       007B (123)\n+51E552 Extra Length          0009 (9)\n+51E554 Comment Length        0000 (0)\n+51E556 Disk Start            0000 (0)\n+51E558 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E55A Ext File Attributes   00000000 (0)\n+51E55E Local Header Offset   000CF125 (848165)\n+51E562 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E562: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E5DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E5DF   Length              0005 (5)\n+51E5E1   Flags               01 (1) 'Modification'\n+51E5E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E5E6 CENTRAL HEADER #336   02014B50 (33639248)\n+51E5EA Created Zip Spec      14 (20) '2.0'\n+51E5EB Created OS            00 (0) 'MS-DOS'\n+51E5EC Extract Zip Spec      14 (20) '2.0'\n+51E5ED Extract OS            00 (0) 'MS-DOS'\n+51E5EE General Purpose Flag  0000 (0)\n+51E5F0 Compression Method    0000 (0) 'Stored'\n+51E5F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E5F6 CRC                   00000000 (0)\n+51E5FA Compressed Size       00000000 (0)\n+51E5FE Uncompressed Size     00000000 (0)\n+51E602 Filename Length       0063 (99)\n+51E604 Extra Length          0009 (9)\n+51E606 Comment Length        0000 (0)\n+51E608 Disk Start            0000 (0)\n+51E60A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E60C Ext File Attributes   00000000 (0)\n+51E610 Local Header Offset   000CFE80 (851584)\n+51E614 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E614: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E677 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E679   Length              0005 (5)\n+51E67B   Flags               01 (1) 'Modification'\n+51E67C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E680 CENTRAL HEADER #337   02014B50 (33639248)\n+51E684 Created Zip Spec      14 (20) '2.0'\n+51E685 Created OS            00 (0) 'MS-DOS'\n+51E686 Extract Zip Spec      14 (20) '2.0'\n+51E687 Extract OS            00 (0) 'MS-DOS'\n+51E688 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E68A Compression Method    0000 (0) 'Stored'\n+51E68C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E690 CRC                   2D1E752C (756970796)\n+51E694 Compressed Size       00005038 (20536)\n+51E698 Uncompressed Size     00005038 (20536)\n+51E69C Filename Length       0079 (121)\n+51E69E Extra Length          0009 (9)\n+51E6A0 Comment Length        0000 (0)\n+51E6A2 Disk Start            0000 (0)\n+51E6A4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E6A6 Ext File Attributes   00000000 (0)\n+51E6AA Local Header Offset   000CFF0A (851722)\n+51E6AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E6AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E727 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E729   Length              0005 (5)\n+51E72B   Flags               01 (1) 'Modification'\n+51E72C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E730 CENTRAL HEADER #338   02014B50 (33639248)\n+51E734 Created Zip Spec      14 (20) '2.0'\n+51E735 Created OS            00 (0) 'MS-DOS'\n+51E736 Extract Zip Spec      14 (20) '2.0'\n+51E737 Extract OS            00 (0) 'MS-DOS'\n+51E738 General Purpose Flag  0000 (0)\n+51E73A Compression Method    0000 (0) 'Stored'\n+51E73C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E740 CRC                   00000000 (0)\n+51E744 Compressed Size       00000000 (0)\n+51E748 Uncompressed Size     00000000 (0)\n+51E74C Filename Length       005C (92)\n+51E74E Extra Length          0009 (9)\n+51E750 Comment Length        0000 (0)\n+51E752 Disk Start            0000 (0)\n+51E754 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E756 Ext File Attributes   00000000 (0)\n+51E75A Local Header Offset   000D4FF2 (872434)\n+51E75E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E75E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E7BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E7BC   Length              0005 (5)\n+51E7BE   Flags               01 (1) 'Modification'\n+51E7BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E7C3 CENTRAL HEADER #339   02014B50 (33639248)\n+51E7C7 Created Zip Spec      14 (20) '2.0'\n+51E7C8 Created OS            00 (0) 'MS-DOS'\n+51E7C9 Extract Zip Spec      14 (20) '2.0'\n+51E7CA Extract OS            00 (0) 'MS-DOS'\n+51E7CB General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E7CD Compression Method    0000 (0) 'Stored'\n+51E7CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E7D3 CRC                   DB187B38 (3675814712)\n+51E7D7 Compressed Size       00001A85 (6789)\n+51E7DB Uncompressed Size     00001A85 (6789)\n+51E7DF Filename Length       0072 (114)\n+51E7E1 Extra Length          0009 (9)\n+51E7E3 Comment Length        0000 (0)\n+51E7E5 Disk Start            0000 (0)\n+51E7E7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E7E9 Ext File Attributes   00000000 (0)\n+51E7ED Local Header Offset   000D5075 (872565)\n+51E7F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E7F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E863 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E865   Length              0005 (5)\n+51E867   Flags               01 (1) 'Modification'\n+51E868   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E86C CENTRAL HEADER #340   02014B50 (33639248)\n+51E870 Created Zip Spec      14 (20) '2.0'\n+51E871 Created OS            00 (0) 'MS-DOS'\n+51E872 Extract Zip Spec      14 (20) '2.0'\n+51E873 Extract OS            00 (0) 'MS-DOS'\n+51E874 General Purpose Flag  0000 (0)\n+51E876 Compression Method    0000 (0) 'Stored'\n+51E878 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E87C CRC                   00000000 (0)\n+51E880 Compressed Size       00000000 (0)\n+51E884 Uncompressed Size     00000000 (0)\n+51E888 Filename Length       005D (93)\n+51E88A Extra Length          0009 (9)\n+51E88C Comment Length        0000 (0)\n+51E88E Disk Start            0000 (0)\n+51E890 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E892 Ext File Attributes   00000000 (0)\n+51E896 Local Header Offset   000D6BA3 (879523)\n+51E89A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E89A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E8F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E8F9   Length              0005 (5)\n+51E8FB   Flags               01 (1) 'Modification'\n+51E8FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E900 CENTRAL HEADER #341   02014B50 (33639248)\n+51E904 Created Zip Spec      14 (20) '2.0'\n+51E905 Created OS            00 (0) 'MS-DOS'\n+51E906 Extract Zip Spec      14 (20) '2.0'\n+51E907 Extract OS            00 (0) 'MS-DOS'\n+51E908 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51E90A Compression Method    0000 (0) 'Stored'\n+51E90C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E910 CRC                   CD183667 (3440916071)\n+51E914 Compressed Size       00001A6E (6766)\n+51E918 Uncompressed Size     00001A6E (6766)\n+51E91C Filename Length       0073 (115)\n+51E91E Extra Length          0009 (9)\n+51E920 Comment Length        0000 (0)\n+51E922 Disk Start            0000 (0)\n+51E924 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E926 Ext File Attributes   00000000 (0)\n+51E92A Local Header Offset   000D6C27 (879655)\n+51E92E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E92E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51E9A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51E9A3   Length              0005 (5)\n+51E9A5   Flags               01 (1) 'Modification'\n+51E9A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51E9AA CENTRAL HEADER #342   02014B50 (33639248)\n+51E9AE Created Zip Spec      14 (20) '2.0'\n+51E9AF Created OS            00 (0) 'MS-DOS'\n+51E9B0 Extract Zip Spec      14 (20) '2.0'\n+51E9B1 Extract OS            00 (0) 'MS-DOS'\n+51E9B2 General Purpose Flag  0000 (0)\n+51E9B4 Compression Method    0000 (0) 'Stored'\n+51E9B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51E9BA CRC                   00000000 (0)\n+51E9BE Compressed Size       00000000 (0)\n+51E9C2 Uncompressed Size     00000000 (0)\n+51E9C6 Filename Length       005D (93)\n+51E9C8 Extra Length          0009 (9)\n+51E9CA Comment Length        0000 (0)\n+51E9CC Disk Start            0000 (0)\n+51E9CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51E9D0 Ext File Attributes   00000000 (0)\n+51E9D4 Local Header Offset   000D873F (886591)\n+51E9D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51E9D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EA35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EA37   Length              0005 (5)\n+51EA39   Flags               01 (1) 'Modification'\n+51EA3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EA3E CENTRAL HEADER #343   02014B50 (33639248)\n+51EA42 Created Zip Spec      14 (20) '2.0'\n+51EA43 Created OS            00 (0) 'MS-DOS'\n+51EA44 Extract Zip Spec      14 (20) '2.0'\n+51EA45 Extract OS            00 (0) 'MS-DOS'\n+51EA46 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51EA48 Compression Method    0000 (0) 'Stored'\n+51EA4A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EA4E CRC                   0C7DD276 (209572470)\n+51EA52 Compressed Size       00001A92 (6802)\n+51EA56 Uncompressed Size     00001A92 (6802)\n+51EA5A Filename Length       0073 (115)\n+51EA5C Extra Length          0009 (9)\n+51EA5E Comment Length        0000 (0)\n+51EA60 Disk Start            0000 (0)\n+51EA62 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EA64 Ext File Attributes   00000000 (0)\n+51EA68 Local Header Offset   000D87C3 (886723)\n+51EA6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EA6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EADF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EAE1   Length              0005 (5)\n+51EAE3   Flags               01 (1) 'Modification'\n+51EAE4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EAE8 CENTRAL HEADER #344   02014B50 (33639248)\n+51EAEC Created Zip Spec      14 (20) '2.0'\n+51EAED Created OS            00 (0) 'MS-DOS'\n+51EAEE Extract Zip Spec      14 (20) '2.0'\n+51EAEF Extract OS            00 (0) 'MS-DOS'\n+51EAF0 General Purpose Flag  0000 (0)\n+51EAF2 Compression Method    0000 (0) 'Stored'\n+51EAF4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EAF8 CRC                   00000000 (0)\n+51EAFC Compressed Size       00000000 (0)\n+51EB00 Uncompressed Size     00000000 (0)\n+51EB04 Filename Length       005E (94)\n+51EB06 Extra Length          0009 (9)\n+51EB08 Comment Length        0000 (0)\n+51EB0A Disk Start            0000 (0)\n+51EB0C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EB0E Ext File Attributes   00000000 (0)\n+51EB12 Local Header Offset   000DA2FF (893695)\n+51EB16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EB16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EB74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EB76   Length              0005 (5)\n+51EB78   Flags               01 (1) 'Modification'\n+51EB79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EB7D CENTRAL HEADER #345   02014B50 (33639248)\n+51EB81 Created Zip Spec      14 (20) '2.0'\n+51EB82 Created OS            00 (0) 'MS-DOS'\n+51EB83 Extract Zip Spec      14 (20) '2.0'\n+51EB84 Extract OS            00 (0) 'MS-DOS'\n+51EB85 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51EB87 Compression Method    0000 (0) 'Stored'\n+51EB89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EB8D CRC                   60EA12C2 (1625952962)\n+51EB91 Compressed Size       00001733 (5939)\n+51EB95 Uncompressed Size     00001733 (5939)\n+51EB99 Filename Length       0074 (116)\n+51EB9B Extra Length          0009 (9)\n+51EB9D Comment Length        0000 (0)\n+51EB9F Disk Start            0000 (0)\n+51EBA1 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EBA3 Ext File Attributes   00000000 (0)\n+51EBA7 Local Header Offset   000DA384 (893828)\n+51EBAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EBAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EC1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EC21   Length              0005 (5)\n+51EC23   Flags               01 (1) 'Modification'\n+51EC24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EC28 CENTRAL HEADER #346   02014B50 (33639248)\n+51EC2C Created Zip Spec      14 (20) '2.0'\n+51EC2D Created OS            00 (0) 'MS-DOS'\n+51EC2E Extract Zip Spec      14 (20) '2.0'\n+51EC2F Extract OS            00 (0) 'MS-DOS'\n+51EC30 General Purpose Flag  0000 (0)\n+51EC32 Compression Method    0000 (0) 'Stored'\n+51EC34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EC38 CRC                   00000000 (0)\n+51EC3C Compressed Size       00000000 (0)\n+51EC40 Uncompressed Size     00000000 (0)\n+51EC44 Filename Length       0061 (97)\n+51EC46 Extra Length          0009 (9)\n+51EC48 Comment Length        0000 (0)\n+51EC4A Disk Start            0000 (0)\n+51EC4C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EC4E Ext File Attributes   00000000 (0)\n+51EC52 Local Header Offset   000DBB62 (899938)\n+51EC56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EC56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51ECB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51ECB9   Length              0005 (5)\n+51ECBB   Flags               01 (1) 'Modification'\n+51ECBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51ECC0 CENTRAL HEADER #347   02014B50 (33639248)\n+51ECC4 Created Zip Spec      14 (20) '2.0'\n+51ECC5 Created OS            00 (0) 'MS-DOS'\n+51ECC6 Extract Zip Spec      14 (20) '2.0'\n+51ECC7 Extract OS            00 (0) 'MS-DOS'\n+51ECC8 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51ECCA Compression Method    0000 (0) 'Stored'\n+51ECCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51ECD0 CRC                   4BB1EABD (1269951165)\n+51ECD4 Compressed Size       0000167D (5757)\n+51ECD8 Uncompressed Size     0000167D (5757)\n+51ECDC Filename Length       0077 (119)\n+51ECDE Extra Length          0009 (9)\n+51ECE0 Comment Length        0000 (0)\n+51ECE2 Disk Start            0000 (0)\n+51ECE4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51ECE6 Ext File Attributes   00000000 (0)\n+51ECEA Local Header Offset   000DBBEA (900074)\n+51ECEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51ECEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51ED65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51ED67   Length              0005 (5)\n+51ED69   Flags               01 (1) 'Modification'\n+51ED6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51ED6E CENTRAL HEADER #348   02014B50 (33639248)\n+51ED72 Created Zip Spec      14 (20) '2.0'\n+51ED73 Created OS            00 (0) 'MS-DOS'\n+51ED74 Extract Zip Spec      14 (20) '2.0'\n+51ED75 Extract OS            00 (0) 'MS-DOS'\n+51ED76 General Purpose Flag  0000 (0)\n+51ED78 Compression Method    0000 (0) 'Stored'\n+51ED7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51ED7E CRC                   00000000 (0)\n+51ED82 Compressed Size       00000000 (0)\n+51ED86 Uncompressed Size     00000000 (0)\n+51ED8A Filename Length       0061 (97)\n+51ED8C Extra Length          0009 (9)\n+51ED8E Comment Length        0000 (0)\n+51ED90 Disk Start            0000 (0)\n+51ED92 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51ED94 Ext File Attributes   00000000 (0)\n+51ED98 Local Header Offset   000DD315 (906005)\n+51ED9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51ED9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EDFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EDFF   Length              0005 (5)\n+51EE01   Flags               01 (1) 'Modification'\n+51EE02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EE06 CENTRAL HEADER #349   02014B50 (33639248)\n+51EE0A Created Zip Spec      14 (20) '2.0'\n+51EE0B Created OS            00 (0) 'MS-DOS'\n+51EE0C Extract Zip Spec      14 (20) '2.0'\n+51EE0D Extract OS            00 (0) 'MS-DOS'\n+51EE0E General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51EE10 Compression Method    0000 (0) 'Stored'\n+51EE12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EE16 CRC                   A18A8EB9 (2710212281)\n+51EE1A Compressed Size       0000328A (12938)\n+51EE1E Uncompressed Size     0000328A (12938)\n+51EE22 Filename Length       0077 (119)\n+51EE24 Extra Length          0009 (9)\n+51EE26 Comment Length        0000 (0)\n+51EE28 Disk Start            0000 (0)\n+51EE2A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EE2C Ext File Attributes   00000000 (0)\n+51EE30 Local Header Offset   000DD39D (906141)\n+51EE34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EE34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EEAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EEAD   Length              0005 (5)\n+51EEAF   Flags               01 (1) 'Modification'\n+51EEB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EEB4 CENTRAL HEADER #350   02014B50 (33639248)\n+51EEB8 Created Zip Spec      14 (20) '2.0'\n+51EEB9 Created OS            00 (0) 'MS-DOS'\n+51EEBA Extract Zip Spec      14 (20) '2.0'\n+51EEBB Extract OS            00 (0) 'MS-DOS'\n+51EEBC General Purpose Flag  0000 (0)\n+51EEBE Compression Method    0000 (0) 'Stored'\n+51EEC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EEC4 CRC                   00000000 (0)\n+51EEC8 Compressed Size       00000000 (0)\n+51EECC Uncompressed Size     00000000 (0)\n+51EED0 Filename Length       0060 (96)\n+51EED2 Extra Length          0009 (9)\n+51EED4 Comment Length        0000 (0)\n+51EED6 Disk Start            0000 (0)\n+51EED8 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EEDA Ext File Attributes   00000000 (0)\n+51EEDE Local Header Offset   000E06D5 (919253)\n+51EEE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EEE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EF42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EF44   Length              0005 (5)\n+51EF46   Flags               01 (1) 'Modification'\n+51EF47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EF4B CENTRAL HEADER #351   02014B50 (33639248)\n+51EF4F Created Zip Spec      14 (20) '2.0'\n+51EF50 Created OS            00 (0) 'MS-DOS'\n+51EF51 Extract Zip Spec      14 (20) '2.0'\n+51EF52 Extract OS            00 (0) 'MS-DOS'\n+51EF53 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51EF55 Compression Method    0000 (0) 'Stored'\n+51EF57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51EF5B CRC                   B7B762D6 (3082248918)\n+51EF5F Compressed Size       00003879 (14457)\n+51EF63 Uncompressed Size     00003879 (14457)\n+51EF67 Filename Length       0076 (118)\n+51EF69 Extra Length          0009 (9)\n+51EF6B Comment Length        0000 (0)\n+51EF6D Disk Start            0000 (0)\n+51EF6F Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51EF71 Ext File Attributes   00000000 (0)\n+51EF75 Local Header Offset   000E075C (919388)\n+51EF79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51EF79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51EFEF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51EFF1   Length              0005 (5)\n+51EFF3   Flags               01 (1) 'Modification'\n+51EFF4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51EFF8 CENTRAL HEADER #352   02014B50 (33639248)\n+51EFFC Created Zip Spec      14 (20) '2.0'\n+51EFFD Created OS            00 (0) 'MS-DOS'\n+51EFFE Extract Zip Spec      14 (20) '2.0'\n+51EFFF Extract OS            00 (0) 'MS-DOS'\n+51F000 General Purpose Flag  0000 (0)\n+51F002 Compression Method    0000 (0) 'Stored'\n+51F004 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F008 CRC                   00000000 (0)\n+51F00C Compressed Size       00000000 (0)\n+51F010 Uncompressed Size     00000000 (0)\n+51F014 Filename Length       0064 (100)\n+51F016 Extra Length          0009 (9)\n+51F018 Comment Length        0000 (0)\n+51F01A Disk Start            0000 (0)\n+51F01C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F01E Ext File Attributes   00000000 (0)\n+51F022 Local Header Offset   000E4082 (934018)\n+51F026 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F026: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F08A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F08C   Length              0005 (5)\n+51F08E   Flags               01 (1) 'Modification'\n+51F08F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F093 CENTRAL HEADER #353   02014B50 (33639248)\n+51F097 Created Zip Spec      14 (20) '2.0'\n+51F098 Created OS            00 (0) 'MS-DOS'\n+51F099 Extract Zip Spec      14 (20) '2.0'\n+51F09A Extract OS            00 (0) 'MS-DOS'\n+51F09B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F09D Compression Method    0000 (0) 'Stored'\n+51F09F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F0A3 CRC                   A2B9D29A (2730087066)\n+51F0A7 Compressed Size       00002150 (8528)\n+51F0AB Uncompressed Size     00002150 (8528)\n+51F0AF Filename Length       007A (122)\n+51F0B1 Extra Length          0009 (9)\n+51F0B3 Comment Length        0000 (0)\n+51F0B5 Disk Start            0000 (0)\n+51F0B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F0B9 Ext File Attributes   00000000 (0)\n+51F0BD Local Header Offset   000E410D (934157)\n+51F0C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F0C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F13B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F13D   Length              0005 (5)\n+51F13F   Flags               01 (1) 'Modification'\n+51F140   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F144 CENTRAL HEADER #354   02014B50 (33639248)\n+51F148 Created Zip Spec      14 (20) '2.0'\n+51F149 Created OS            00 (0) 'MS-DOS'\n+51F14A Extract Zip Spec      14 (20) '2.0'\n+51F14B Extract OS            00 (0) 'MS-DOS'\n+51F14C General Purpose Flag  0000 (0)\n+51F14E Compression Method    0000 (0) 'Stored'\n+51F150 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F154 CRC                   00000000 (0)\n+51F158 Compressed Size       00000000 (0)\n+51F15C Uncompressed Size     00000000 (0)\n+51F160 Filename Length       005D (93)\n+51F162 Extra Length          0009 (9)\n+51F164 Comment Length        0000 (0)\n+51F166 Disk Start            0000 (0)\n+51F168 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F16A Ext File Attributes   00000000 (0)\n+51F16E Local Header Offset   000E630E (942862)\n+51F172 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F172: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F1CF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F1D1   Length              0005 (5)\n+51F1D3   Flags               01 (1) 'Modification'\n+51F1D4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F1D8 CENTRAL HEADER #355   02014B50 (33639248)\n+51F1DC Created Zip Spec      14 (20) '2.0'\n+51F1DD Created OS            00 (0) 'MS-DOS'\n+51F1DE Extract Zip Spec      14 (20) '2.0'\n+51F1DF Extract OS            00 (0) 'MS-DOS'\n+51F1E0 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F1E2 Compression Method    0000 (0) 'Stored'\n+51F1E4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F1E8 CRC                   C4FC7EA2 (3304881826)\n+51F1EC Compressed Size       000011DC (4572)\n+51F1F0 Uncompressed Size     000011DC (4572)\n+51F1F4 Filename Length       0073 (115)\n+51F1F6 Extra Length          0009 (9)\n+51F1F8 Comment Length        0000 (0)\n+51F1FA Disk Start            0000 (0)\n+51F1FC Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F1FE Ext File Attributes   00000000 (0)\n+51F202 Local Header Offset   000E6392 (942994)\n+51F206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F279 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F27B   Length              0005 (5)\n+51F27D   Flags               01 (1) 'Modification'\n+51F27E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F282 CENTRAL HEADER #356   02014B50 (33639248)\n+51F286 Created Zip Spec      14 (20) '2.0'\n+51F287 Created OS            00 (0) 'MS-DOS'\n+51F288 Extract Zip Spec      14 (20) '2.0'\n+51F289 Extract OS            00 (0) 'MS-DOS'\n+51F28A General Purpose Flag  0000 (0)\n+51F28C Compression Method    0000 (0) 'Stored'\n+51F28E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F292 CRC                   00000000 (0)\n+51F296 Compressed Size       00000000 (0)\n+51F29A Uncompressed Size     00000000 (0)\n+51F29E Filename Length       0060 (96)\n+51F2A0 Extra Length          0009 (9)\n+51F2A2 Comment Length        0000 (0)\n+51F2A4 Disk Start            0000 (0)\n+51F2A6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F2A8 Ext File Attributes   00000000 (0)\n+51F2AC Local Header Offset   000E7618 (947736)\n+51F2B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F2B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F310 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F312   Length              0005 (5)\n+51F314   Flags               01 (1) 'Modification'\n+51F315   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F319 CENTRAL HEADER #357   02014B50 (33639248)\n+51F31D Created Zip Spec      14 (20) '2.0'\n+51F31E Created OS            00 (0) 'MS-DOS'\n+51F31F Extract Zip Spec      14 (20) '2.0'\n+51F320 Extract OS            00 (0) 'MS-DOS'\n+51F321 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F323 Compression Method    0000 (0) 'Stored'\n+51F325 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F329 CRC                   EE30A8D8 (3996166360)\n+51F32D Compressed Size       000072FB (29435)\n+51F331 Uncompressed Size     000072FB (29435)\n+51F335 Filename Length       0076 (118)\n+51F337 Extra Length          0009 (9)\n+51F339 Comment Length        0000 (0)\n+51F33B Disk Start            0000 (0)\n+51F33D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F33F Ext File Attributes   00000000 (0)\n+51F343 Local Header Offset   000E769F (947871)\n+51F347 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F347: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F3BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F3BF   Length              0005 (5)\n+51F3C1   Flags               01 (1) 'Modification'\n+51F3C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F3C6 CENTRAL HEADER #358   02014B50 (33639248)\n+51F3CA Created Zip Spec      14 (20) '2.0'\n+51F3CB Created OS            00 (0) 'MS-DOS'\n+51F3CC Extract Zip Spec      14 (20) '2.0'\n+51F3CD Extract OS            00 (0) 'MS-DOS'\n+51F3CE General Purpose Flag  0000 (0)\n+51F3D0 Compression Method    0000 (0) 'Stored'\n+51F3D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F3D6 CRC                   00000000 (0)\n+51F3DA Compressed Size       00000000 (0)\n+51F3DE Uncompressed Size     00000000 (0)\n+51F3E2 Filename Length       0066 (102)\n+51F3E4 Extra Length          0009 (9)\n+51F3E6 Comment Length        0000 (0)\n+51F3E8 Disk Start            0000 (0)\n+51F3EA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F3EC Ext File Attributes   00000000 (0)\n+51F3F0 Local Header Offset   000EEA47 (977479)\n+51F3F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F3F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F45A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F45C   Length              0005 (5)\n+51F45E   Flags               01 (1) 'Modification'\n+51F45F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F463 CENTRAL HEADER #359   02014B50 (33639248)\n+51F467 Created Zip Spec      14 (20) '2.0'\n+51F468 Created OS            00 (0) 'MS-DOS'\n+51F469 Extract Zip Spec      14 (20) '2.0'\n+51F46A Extract OS            00 (0) 'MS-DOS'\n+51F46B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F46D Compression Method    0000 (0) 'Stored'\n+51F46F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F473 CRC                   EA36353C (3929421116)\n+51F477 Compressed Size       0000480E (18446)\n+51F47B Uncompressed Size     0000480E (18446)\n+51F47F Filename Length       007C (124)\n+51F481 Extra Length          0009 (9)\n+51F483 Comment Length        0000 (0)\n+51F485 Disk Start            0000 (0)\n+51F487 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F489 Ext File Attributes   00000000 (0)\n+51F48D Local Header Offset   000EEAD4 (977620)\n+51F491 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F491: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F50D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F50F   Length              0005 (5)\n+51F511   Flags               01 (1) 'Modification'\n+51F512   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F516 CENTRAL HEADER #360   02014B50 (33639248)\n+51F51A Created Zip Spec      14 (20) '2.0'\n+51F51B Created OS            00 (0) 'MS-DOS'\n+51F51C Extract Zip Spec      14 (20) '2.0'\n+51F51D Extract OS            00 (0) 'MS-DOS'\n+51F51E General Purpose Flag  0000 (0)\n+51F520 Compression Method    0000 (0) 'Stored'\n+51F522 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F526 CRC                   00000000 (0)\n+51F52A Compressed Size       00000000 (0)\n+51F52E Uncompressed Size     00000000 (0)\n+51F532 Filename Length       0065 (101)\n+51F534 Extra Length          0009 (9)\n+51F536 Comment Length        0000 (0)\n+51F538 Disk Start            0000 (0)\n+51F53A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F53C Ext File Attributes   00000000 (0)\n+51F540 Local Header Offset   000F3395 (996245)\n+51F544 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F544: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F5A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F5AB   Length              0005 (5)\n+51F5AD   Flags               01 (1) 'Modification'\n+51F5AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F5B2 CENTRAL HEADER #361   02014B50 (33639248)\n+51F5B6 Created Zip Spec      14 (20) '2.0'\n+51F5B7 Created OS            00 (0) 'MS-DOS'\n+51F5B8 Extract Zip Spec      14 (20) '2.0'\n+51F5B9 Extract OS            00 (0) 'MS-DOS'\n+51F5BA General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F5BC Compression Method    0000 (0) 'Stored'\n+51F5BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F5C2 CRC                   CA474DE0 (3393670624)\n+51F5C6 Compressed Size       000007B6 (1974)\n+51F5CA Uncompressed Size     000007B6 (1974)\n+51F5CE Filename Length       007B (123)\n+51F5D0 Extra Length          0009 (9)\n+51F5D2 Comment Length        0000 (0)\n+51F5D4 Disk Start            0000 (0)\n+51F5D6 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F5D8 Ext File Attributes   00000000 (0)\n+51F5DC Local Header Offset   000F3421 (996385)\n+51F5E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F5E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F65B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F65D   Length              0005 (5)\n+51F65F   Flags               01 (1) 'Modification'\n+51F660   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F664 CENTRAL HEADER #362   02014B50 (33639248)\n+51F668 Created Zip Spec      14 (20) '2.0'\n+51F669 Created OS            00 (0) 'MS-DOS'\n+51F66A Extract Zip Spec      14 (20) '2.0'\n+51F66B Extract OS            00 (0) 'MS-DOS'\n+51F66C General Purpose Flag  0000 (0)\n+51F66E Compression Method    0000 (0) 'Stored'\n+51F670 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F674 CRC                   00000000 (0)\n+51F678 Compressed Size       00000000 (0)\n+51F67C Uncompressed Size     00000000 (0)\n+51F680 Filename Length       0061 (97)\n+51F682 Extra Length          0009 (9)\n+51F684 Comment Length        0000 (0)\n+51F686 Disk Start            0000 (0)\n+51F688 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F68A Ext File Attributes   00000000 (0)\n+51F68E Local Header Offset   000F3C89 (998537)\n+51F692 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F692: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F6F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F6F5   Length              0005 (5)\n+51F6F7   Flags               01 (1) 'Modification'\n+51F6F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F6FC CENTRAL HEADER #363   02014B50 (33639248)\n+51F700 Created Zip Spec      14 (20) '2.0'\n+51F701 Created OS            00 (0) 'MS-DOS'\n+51F702 Extract Zip Spec      14 (20) '2.0'\n+51F703 Extract OS            00 (0) 'MS-DOS'\n+51F704 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F706 Compression Method    0000 (0) 'Stored'\n+51F708 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F70C CRC                   A19F99D4 (2711591380)\n+51F710 Compressed Size       000011CB (4555)\n+51F714 Uncompressed Size     000011CB (4555)\n+51F718 Filename Length       0077 (119)\n+51F71A Extra Length          0009 (9)\n+51F71C Comment Length        0000 (0)\n+51F71E Disk Start            0000 (0)\n+51F720 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F722 Ext File Attributes   00000000 (0)\n+51F726 Local Header Offset   000F3D11 (998673)\n+51F72A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F72A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F7A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F7A3   Length              0005 (5)\n+51F7A5   Flags               01 (1) 'Modification'\n+51F7A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F7AA CENTRAL HEADER #364   02014B50 (33639248)\n+51F7AE Created Zip Spec      14 (20) '2.0'\n+51F7AF Created OS            00 (0) 'MS-DOS'\n+51F7B0 Extract Zip Spec      14 (20) '2.0'\n+51F7B1 Extract OS            00 (0) 'MS-DOS'\n+51F7B2 General Purpose Flag  0000 (0)\n+51F7B4 Compression Method    0000 (0) 'Stored'\n+51F7B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F7BA CRC                   00000000 (0)\n+51F7BE Compressed Size       00000000 (0)\n+51F7C2 Uncompressed Size     00000000 (0)\n+51F7C6 Filename Length       005D (93)\n+51F7C8 Extra Length          0009 (9)\n+51F7CA Comment Length        0000 (0)\n+51F7CC Disk Start            0000 (0)\n+51F7CE Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F7D0 Ext File Attributes   00000000 (0)\n+51F7D4 Local Header Offset   000F4F8A (1003402)\n+51F7D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F7D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F835 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F837   Length              0005 (5)\n+51F839   Flags               01 (1) 'Modification'\n+51F83A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F83E CENTRAL HEADER #365   02014B50 (33639248)\n+51F842 Created Zip Spec      14 (20) '2.0'\n+51F843 Created OS            00 (0) 'MS-DOS'\n+51F844 Extract Zip Spec      14 (20) '2.0'\n+51F845 Extract OS            00 (0) 'MS-DOS'\n+51F846 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F848 Compression Method    0000 (0) 'Stored'\n+51F84A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F84E CRC                   7573E84B (1970530379)\n+51F852 Compressed Size       0000284F (10319)\n+51F856 Uncompressed Size     0000284F (10319)\n+51F85A Filename Length       0073 (115)\n+51F85C Extra Length          0009 (9)\n+51F85E Comment Length        0000 (0)\n+51F860 Disk Start            0000 (0)\n+51F862 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F864 Ext File Attributes   00000000 (0)\n+51F868 Local Header Offset   000F500E (1003534)\n+51F86C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F86C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F8DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F8E1   Length              0005 (5)\n+51F8E3   Flags               01 (1) 'Modification'\n+51F8E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F8E8 CENTRAL HEADER #366   02014B50 (33639248)\n+51F8EC Created Zip Spec      14 (20) '2.0'\n+51F8ED Created OS            00 (0) 'MS-DOS'\n+51F8EE Extract Zip Spec      14 (20) '2.0'\n+51F8EF Extract OS            00 (0) 'MS-DOS'\n+51F8F0 General Purpose Flag  0000 (0)\n+51F8F2 Compression Method    0000 (0) 'Stored'\n+51F8F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F8F8 CRC                   00000000 (0)\n+51F8FC Compressed Size       00000000 (0)\n+51F900 Uncompressed Size     00000000 (0)\n+51F904 Filename Length       0061 (97)\n+51F906 Extra Length          0009 (9)\n+51F908 Comment Length        0000 (0)\n+51F90A Disk Start            0000 (0)\n+51F90C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F90E Ext File Attributes   00000000 (0)\n+51F912 Local Header Offset   000F7907 (1014023)\n+51F916 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F916: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51F977 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51F979   Length              0005 (5)\n+51F97B   Flags               01 (1) 'Modification'\n+51F97C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51F980 CENTRAL HEADER #367   02014B50 (33639248)\n+51F984 Created Zip Spec      14 (20) '2.0'\n+51F985 Created OS            00 (0) 'MS-DOS'\n+51F986 Extract Zip Spec      14 (20) '2.0'\n+51F987 Extract OS            00 (0) 'MS-DOS'\n+51F988 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51F98A Compression Method    0000 (0) 'Stored'\n+51F98C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51F990 CRC                   131CB9D8 (320649688)\n+51F994 Compressed Size       00002777 (10103)\n+51F998 Uncompressed Size     00002777 (10103)\n+51F99C Filename Length       0077 (119)\n+51F99E Extra Length          0009 (9)\n+51F9A0 Comment Length        0000 (0)\n+51F9A2 Disk Start            0000 (0)\n+51F9A4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51F9A6 Ext File Attributes   00000000 (0)\n+51F9AA Local Header Offset   000F798F (1014159)\n+51F9AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51F9AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FA25 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FA27   Length              0005 (5)\n+51FA29   Flags               01 (1) 'Modification'\n+51FA2A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FA2E CENTRAL HEADER #368   02014B50 (33639248)\n+51FA32 Created Zip Spec      14 (20) '2.0'\n+51FA33 Created OS            00 (0) 'MS-DOS'\n+51FA34 Extract Zip Spec      14 (20) '2.0'\n+51FA35 Extract OS            00 (0) 'MS-DOS'\n+51FA36 General Purpose Flag  0000 (0)\n+51FA38 Compression Method    0000 (0) 'Stored'\n+51FA3A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FA3E CRC                   00000000 (0)\n+51FA42 Compressed Size       00000000 (0)\n+51FA46 Uncompressed Size     00000000 (0)\n+51FA4A Filename Length       0060 (96)\n+51FA4C Extra Length          0009 (9)\n+51FA4E Comment Length        0000 (0)\n+51FA50 Disk Start            0000 (0)\n+51FA52 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FA54 Ext File Attributes   00000000 (0)\n+51FA58 Local Header Offset   000FA1B4 (1024436)\n+51FA5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FA5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FABC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FABE   Length              0005 (5)\n+51FAC0   Flags               01 (1) 'Modification'\n+51FAC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FAC5 CENTRAL HEADER #369   02014B50 (33639248)\n+51FAC9 Created Zip Spec      14 (20) '2.0'\n+51FACA Created OS            00 (0) 'MS-DOS'\n+51FACB Extract Zip Spec      14 (20) '2.0'\n+51FACC Extract OS            00 (0) 'MS-DOS'\n+51FACD General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51FACF Compression Method    0000 (0) 'Stored'\n+51FAD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FAD5 CRC                   95FAB1DA (2516234714)\n+51FAD9 Compressed Size       0000110D (4365)\n+51FADD Uncompressed Size     0000110D (4365)\n+51FAE1 Filename Length       0076 (118)\n+51FAE3 Extra Length          0009 (9)\n+51FAE5 Comment Length        0000 (0)\n+51FAE7 Disk Start            0000 (0)\n+51FAE9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FAEB Ext File Attributes   00000000 (0)\n+51FAEF Local Header Offset   000FA23B (1024571)\n+51FAF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FAF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FB69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FB6B   Length              0005 (5)\n+51FB6D   Flags               01 (1) 'Modification'\n+51FB6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FB72 CENTRAL HEADER #370   02014B50 (33639248)\n+51FB76 Created Zip Spec      14 (20) '2.0'\n+51FB77 Created OS            00 (0) 'MS-DOS'\n+51FB78 Extract Zip Spec      14 (20) '2.0'\n+51FB79 Extract OS            00 (0) 'MS-DOS'\n+51FB7A General Purpose Flag  0000 (0)\n+51FB7C Compression Method    0000 (0) 'Stored'\n+51FB7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FB82 CRC                   00000000 (0)\n+51FB86 Compressed Size       00000000 (0)\n+51FB8A Uncompressed Size     00000000 (0)\n+51FB8E Filename Length       0063 (99)\n+51FB90 Extra Length          0009 (9)\n+51FB92 Comment Length        0000 (0)\n+51FB94 Disk Start            0000 (0)\n+51FB96 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FB98 Ext File Attributes   00000000 (0)\n+51FB9C Local Header Offset   000FB3F5 (1029109)\n+51FBA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FBA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FC03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FC05   Length              0005 (5)\n+51FC07   Flags               01 (1) 'Modification'\n+51FC08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FC0C CENTRAL HEADER #371   02014B50 (33639248)\n+51FC10 Created Zip Spec      14 (20) '2.0'\n+51FC11 Created OS            00 (0) 'MS-DOS'\n+51FC12 Extract Zip Spec      14 (20) '2.0'\n+51FC13 Extract OS            00 (0) 'MS-DOS'\n+51FC14 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51FC16 Compression Method    0000 (0) 'Stored'\n+51FC18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FC1C CRC                   B1E82858 (2984781912)\n+51FC20 Compressed Size       000019D6 (6614)\n+51FC24 Uncompressed Size     000019D6 (6614)\n+51FC28 Filename Length       0079 (121)\n+51FC2A Extra Length          0009 (9)\n+51FC2C Comment Length        0000 (0)\n+51FC2E Disk Start            0000 (0)\n+51FC30 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FC32 Ext File Attributes   00000000 (0)\n+51FC36 Local Header Offset   000FB47F (1029247)\n+51FC3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FC3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FCB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FCB5   Length              0005 (5)\n+51FCB7   Flags               01 (1) 'Modification'\n+51FCB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FCBC CENTRAL HEADER #372   02014B50 (33639248)\n+51FCC0 Created Zip Spec      14 (20) '2.0'\n+51FCC1 Created OS            00 (0) 'MS-DOS'\n+51FCC2 Extract Zip Spec      14 (20) '2.0'\n+51FCC3 Extract OS            00 (0) 'MS-DOS'\n+51FCC4 General Purpose Flag  0000 (0)\n+51FCC6 Compression Method    0000 (0) 'Stored'\n+51FCC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FCCC CRC                   00000000 (0)\n+51FCD0 Compressed Size       00000000 (0)\n+51FCD4 Uncompressed Size     00000000 (0)\n+51FCD8 Filename Length       0060 (96)\n+51FCDA Extra Length          0009 (9)\n+51FCDC Comment Length        0000 (0)\n+51FCDE Disk Start            0000 (0)\n+51FCE0 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FCE2 Ext File Attributes   00000000 (0)\n+51FCE6 Local Header Offset   000FCF05 (1036037)\n+51FCEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FCEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FD4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FD4C   Length              0005 (5)\n+51FD4E   Flags               01 (1) 'Modification'\n+51FD4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FD53 CENTRAL HEADER #373   02014B50 (33639248)\n+51FD57 Created Zip Spec      14 (20) '2.0'\n+51FD58 Created OS            00 (0) 'MS-DOS'\n+51FD59 Extract Zip Spec      14 (20) '2.0'\n+51FD5A Extract OS            00 (0) 'MS-DOS'\n+51FD5B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51FD5D Compression Method    0000 (0) 'Stored'\n+51FD5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FD63 CRC                   EA13965E (3927152222)\n+51FD67 Compressed Size       00000F7E (3966)\n+51FD6B Uncompressed Size     00000F7E (3966)\n+51FD6F Filename Length       0076 (118)\n+51FD71 Extra Length          0009 (9)\n+51FD73 Comment Length        0000 (0)\n+51FD75 Disk Start            0000 (0)\n+51FD77 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FD79 Ext File Attributes   00000000 (0)\n+51FD7D Local Header Offset   000FCF8C (1036172)\n+51FD81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FD81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FDF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FDF9   Length              0005 (5)\n+51FDFB   Flags               01 (1) 'Modification'\n+51FDFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FE00 CENTRAL HEADER #374   02014B50 (33639248)\n+51FE04 Created Zip Spec      14 (20) '2.0'\n+51FE05 Created OS            00 (0) 'MS-DOS'\n+51FE06 Extract Zip Spec      14 (20) '2.0'\n+51FE07 Extract OS            00 (0) 'MS-DOS'\n+51FE08 General Purpose Flag  0000 (0)\n+51FE0A Compression Method    0000 (0) 'Stored'\n+51FE0C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FE10 CRC                   00000000 (0)\n+51FE14 Compressed Size       00000000 (0)\n+51FE18 Uncompressed Size     00000000 (0)\n+51FE1C Filename Length       0059 (89)\n+51FE1E Extra Length          0009 (9)\n+51FE20 Comment Length        0000 (0)\n+51FE22 Disk Start            0000 (0)\n+51FE24 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FE26 Ext File Attributes   00000000 (0)\n+51FE2A Local Header Offset   000FDFB7 (1040311)\n+51FE2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FE2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FE87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FE89   Length              0005 (5)\n+51FE8B   Flags               01 (1) 'Modification'\n+51FE8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FE90 CENTRAL HEADER #375   02014B50 (33639248)\n+51FE94 Created Zip Spec      14 (20) '2.0'\n+51FE95 Created OS            00 (0) 'MS-DOS'\n+51FE96 Extract Zip Spec      14 (20) '2.0'\n+51FE97 Extract OS            00 (0) 'MS-DOS'\n+51FE98 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51FE9A Compression Method    0000 (0) 'Stored'\n+51FE9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FEA0 CRC                   C8903588 (3364894088)\n+51FEA4 Compressed Size       00002CD6 (11478)\n+51FEA8 Uncompressed Size     00002CD6 (11478)\n+51FEAC Filename Length       006F (111)\n+51FEAE Extra Length          0009 (9)\n+51FEB0 Comment Length        0000 (0)\n+51FEB2 Disk Start            0000 (0)\n+51FEB4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FEB6 Ext File Attributes   00000000 (0)\n+51FEBA Local Header Offset   000FE037 (1040439)\n+51FEBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FEBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FF2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FF2F   Length              0005 (5)\n+51FF31   Flags               01 (1) 'Modification'\n+51FF32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FF36 CENTRAL HEADER #376   02014B50 (33639248)\n+51FF3A Created Zip Spec      14 (20) '2.0'\n+51FF3B Created OS            00 (0) 'MS-DOS'\n+51FF3C Extract Zip Spec      14 (20) '2.0'\n+51FF3D Extract OS            00 (0) 'MS-DOS'\n+51FF3E General Purpose Flag  0000 (0)\n+51FF40 Compression Method    0000 (0) 'Stored'\n+51FF42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FF46 CRC                   00000000 (0)\n+51FF4A Compressed Size       00000000 (0)\n+51FF4E Uncompressed Size     00000000 (0)\n+51FF52 Filename Length       006A (106)\n+51FF54 Extra Length          0009 (9)\n+51FF56 Comment Length        0000 (0)\n+51FF58 Disk Start            0000 (0)\n+51FF5A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FF5C Ext File Attributes   00000000 (0)\n+51FF60 Local Header Offset   00100DB3 (1052083)\n+51FF64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x51FF64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51FFCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+51FFD0   Length              0005 (5)\n+51FFD2   Flags               01 (1) 'Modification'\n+51FFD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+51FFD7 CENTRAL HEADER #377   02014B50 (33639248)\n+51FFDB Created Zip Spec      14 (20) '2.0'\n+51FFDC Created OS            00 (0) 'MS-DOS'\n+51FFDD Extract Zip Spec      14 (20) '2.0'\n+51FFDE Extract OS            00 (0) 'MS-DOS'\n+51FFDF General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+51FFE1 Compression Method    0000 (0) 'Stored'\n+51FFE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+51FFE7 CRC                   D19560D0 (3516227792)\n+51FFEB Compressed Size       00000A2F (2607)\n+51FFEF Uncompressed Size     00000A2F (2607)\n+51FFF3 Filename Length       0080 (128)\n+51FFF5 Extra Length          0009 (9)\n+51FFF7 Comment Length        0000 (0)\n+51FFF9 Disk Start            0000 (0)\n+51FFFB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+51FFFD Ext File Attributes   00000000 (0)\n+520001 Local Header Offset   00100E44 (1052228)\n+520005 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520005: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520085 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520087   Length              0005 (5)\n+520089   Flags               01 (1) 'Modification'\n+52008A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52008E CENTRAL HEADER #378   02014B50 (33639248)\n+520092 Created Zip Spec      14 (20) '2.0'\n+520093 Created OS            00 (0) 'MS-DOS'\n+520094 Extract Zip Spec      14 (20) '2.0'\n+520095 Extract OS            00 (0) 'MS-DOS'\n+520096 General Purpose Flag  0000 (0)\n+520098 Compression Method    0000 (0) 'Stored'\n+52009A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52009E CRC                   00000000 (0)\n+5200A2 Compressed Size       00000000 (0)\n+5200A6 Uncompressed Size     00000000 (0)\n+5200AA Filename Length       002F (47)\n+5200AC Extra Length          0009 (9)\n+5200AE Comment Length        0000 (0)\n+5200B0 Disk Start            0000 (0)\n+5200B2 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5200B4 Ext File Attributes   00000000 (0)\n+5200B8 Local Header Offset   0010192A (1055018)\n+5200BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5200BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5200EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5200ED   Length              0005 (5)\n+5200EF   Flags               01 (1) 'Modification'\n+5200F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5200F4 CENTRAL HEADER #379   02014B50 (33639248)\n+5200F8 Created Zip Spec      14 (20) '2.0'\n+5200F9 Created OS            00 (0) 'MS-DOS'\n+5200FA Extract Zip Spec      14 (20) '2.0'\n+5200FB Extract OS            00 (0) 'MS-DOS'\n+5200FC General Purpose Flag  0000 (0)\n+5200FE Compression Method    0000 (0) 'Stored'\n+520100 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520104 CRC                   00000000 (0)\n+520108 Compressed Size       00000000 (0)\n+52010C Uncompressed Size     00000000 (0)\n+520110 Filename Length       0038 (56)\n+520112 Extra Length          0009 (9)\n+520114 Comment Length        0000 (0)\n+520116 Disk Start            0000 (0)\n+520118 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52011A Ext File Attributes   00000000 (0)\n+52011E Local Header Offset   00101980 (1055104)\n+520122 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520122: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52015A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52015C   Length              0005 (5)\n+52015E   Flags               01 (1) 'Modification'\n+52015F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520163 CENTRAL HEADER #380   02014B50 (33639248)\n+520167 Created Zip Spec      14 (20) '2.0'\n+520168 Created OS            00 (0) 'MS-DOS'\n+520169 Extract Zip Spec      14 (20) '2.0'\n+52016A Extract OS            00 (0) 'MS-DOS'\n+52016B General Purpose Flag  0000 (0)\n+52016D Compression Method    0000 (0) 'Stored'\n+52016F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520173 CRC                   00000000 (0)\n+520177 Compressed Size       00000000 (0)\n+52017B Uncompressed Size     00000000 (0)\n+52017F Filename Length       006E (110)\n+520181 Extra Length          0009 (9)\n+520183 Comment Length        0000 (0)\n+520185 Disk Start            0000 (0)\n+520187 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520189 Ext File Attributes   00000000 (0)\n+52018D Local Header Offset   001019DF (1055199)\n+520191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5201FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520201   Length              0005 (5)\n+520203   Flags               01 (1) 'Modification'\n+520204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520208 CENTRAL HEADER #381   02014B50 (33639248)\n+52020C Created Zip Spec      14 (20) '2.0'\n+52020D Created OS            00 (0) 'MS-DOS'\n+52020E Extract Zip Spec      14 (20) '2.0'\n+52020F Extract OS            00 (0) 'MS-DOS'\n+520210 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520212 Compression Method    0000 (0) 'Stored'\n+520214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520218 CRC                   CB05D09B (3406155931)\n+52021C Compressed Size       00005230 (21040)\n+520220 Uncompressed Size     00005230 (21040)\n+520224 Filename Length       0084 (132)\n+520226 Extra Length          0009 (9)\n+520228 Comment Length        0000 (0)\n+52022A Disk Start            0000 (0)\n+52022C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52022E Ext File Attributes   00000000 (0)\n+520232 Local Header Offset   00101A74 (1055348)\n+520236 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x5202B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x520236: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-52033B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52033D   Length              0005 (5)\n-52033F   Flags               01 (1) 'Modification'\n-520340   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520344 CENTRAL HEADER #382   02014B50 (33639248)\n-520348 Created Zip Spec      14 (20) '2.0'\n-520349 Created OS            00 (0) 'MS-DOS'\n-52034A Extract Zip Spec      14 (20) '2.0'\n-52034B Extract OS            00 (0) 'MS-DOS'\n-52034C General Purpose Flag  0000 (0)\n-52034E Compression Method    0000 (0) 'Stored'\n-520350 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520354 CRC                   00000000 (0)\n-520358 Compressed Size       00000000 (0)\n-52035C Uncompressed Size     00000000 (0)\n-520360 Filename Length       0033 (51)\n-520362 Extra Length          0009 (9)\n-520364 Comment Length        0000 (0)\n-520366 Disk Start            0000 (0)\n-520368 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52036A Ext File Attributes   00000000 (0)\n-52036E Local Header Offset   00106DC8 (1076680)\n-520372 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520372: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5203A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5203A7   Length              0005 (5)\n-5203A9   Flags               01 (1) 'Modification'\n-5203AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5203AE CENTRAL HEADER #383   02014B50 (33639248)\n-5203B2 Created Zip Spec      14 (20) '2.0'\n-5203B3 Created OS            00 (0) 'MS-DOS'\n-5203B4 Extract Zip Spec      14 (20) '2.0'\n-5203B5 Extract OS            00 (0) 'MS-DOS'\n-5203B6 General Purpose Flag  0000 (0)\n-5203B8 Compression Method    0000 (0) 'Stored'\n-5203BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5203BE CRC                   00000000 (0)\n-5203C2 Compressed Size       00000000 (0)\n-5203C6 Uncompressed Size     00000000 (0)\n-5203CA Filename Length       003C (60)\n-5203CC Extra Length          0009 (9)\n-5203CE Comment Length        0000 (0)\n-5203D0 Disk Start            0000 (0)\n-5203D2 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5203D4 Ext File Attributes   00000000 (0)\n-5203D8 Local Header Offset   00106E22 (1076770)\n-5203DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5203DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520418 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52041A   Length              0005 (5)\n-52041C   Flags               01 (1) 'Modification'\n-52041D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520421 CENTRAL HEADER #384   02014B50 (33639248)\n-520425 Created Zip Spec      14 (20) '2.0'\n-520426 Created OS            00 (0) 'MS-DOS'\n-520427 Extract Zip Spec      14 (20) '2.0'\n-520428 Extract OS            00 (0) 'MS-DOS'\n-520429 General Purpose Flag  0000 (0)\n-52042B Compression Method    0000 (0) 'Stored'\n-52042D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520431 CRC                   00000000 (0)\n-520435 Compressed Size       00000000 (0)\n-520439 Uncompressed Size     00000000 (0)\n-52043D Filename Length       0072 (114)\n-52043F Extra Length          0009 (9)\n-520441 Comment Length        0000 (0)\n-520443 Disk Start            0000 (0)\n-520445 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520447 Ext File Attributes   00000000 (0)\n-52044B Local Header Offset   00106E85 (1076869)\n-52044F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52044F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5204C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5204C3   Length              0005 (5)\n-5204C5   Flags               01 (1) 'Modification'\n-5204C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5204CA CENTRAL HEADER #385   02014B50 (33639248)\n-5204CE Created Zip Spec      14 (20) '2.0'\n-5204CF Created OS            00 (0) 'MS-DOS'\n-5204D0 Extract Zip Spec      14 (20) '2.0'\n-5204D1 Extract OS            00 (0) 'MS-DOS'\n-5204D2 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-5204D4 Compression Method    0000 (0) 'Stored'\n-5204D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5204DA CRC                   17E2323C (400699964)\n-5204DE Compressed Size       00000904 (2308)\n-5204E2 Uncompressed Size     00000904 (2308)\n-5204E6 Filename Length       0088 (136)\n-5204E8 Extra Length          0009 (9)\n-5204EA Comment Length        0000 (0)\n-5204EC Disk Start            0000 (0)\n-5204EE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5204F0 Ext File Attributes   00000000 (0)\n-5204F4 Local Header Offset   00106F1E (1077022)\n-5204F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5202BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5202BC   Length              0005 (5)\n+5202BE   Flags               01 (1) 'Modification'\n+5202BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5202C3 CENTRAL HEADER #382   02014B50 (33639248)\n+5202C7 Created Zip Spec      14 (20) '2.0'\n+5202C8 Created OS            00 (0) 'MS-DOS'\n+5202C9 Extract Zip Spec      14 (20) '2.0'\n+5202CA Extract OS            00 (0) 'MS-DOS'\n+5202CB General Purpose Flag  0000 (0)\n+5202CD Compression Method    0000 (0) 'Stored'\n+5202CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5202D3 CRC                   00000000 (0)\n+5202D7 Compressed Size       00000000 (0)\n+5202DB Uncompressed Size     00000000 (0)\n+5202DF Filename Length       0033 (51)\n+5202E1 Extra Length          0009 (9)\n+5202E3 Comment Length        0000 (0)\n+5202E5 Disk Start            0000 (0)\n+5202E7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5202E9 Ext File Attributes   00000000 (0)\n+5202ED Local Header Offset   00106D5F (1076575)\n+5202F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5202F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520324 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520326   Length              0005 (5)\n+520328   Flags               01 (1) 'Modification'\n+520329   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52032D CENTRAL HEADER #383   02014B50 (33639248)\n+520331 Created Zip Spec      14 (20) '2.0'\n+520332 Created OS            00 (0) 'MS-DOS'\n+520333 Extract Zip Spec      14 (20) '2.0'\n+520334 Extract OS            00 (0) 'MS-DOS'\n+520335 General Purpose Flag  0000 (0)\n+520337 Compression Method    0000 (0) 'Stored'\n+520339 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52033D CRC                   00000000 (0)\n+520341 Compressed Size       00000000 (0)\n+520345 Uncompressed Size     00000000 (0)\n+520349 Filename Length       003C (60)\n+52034B Extra Length          0009 (9)\n+52034D Comment Length        0000 (0)\n+52034F Disk Start            0000 (0)\n+520351 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520353 Ext File Attributes   00000000 (0)\n+520357 Local Header Offset   00106DB9 (1076665)\n+52035B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52035B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520397 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520399   Length              0005 (5)\n+52039B   Flags               01 (1) 'Modification'\n+52039C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5203A0 CENTRAL HEADER #384   02014B50 (33639248)\n+5203A4 Created Zip Spec      14 (20) '2.0'\n+5203A5 Created OS            00 (0) 'MS-DOS'\n+5203A6 Extract Zip Spec      14 (20) '2.0'\n+5203A7 Extract OS            00 (0) 'MS-DOS'\n+5203A8 General Purpose Flag  0000 (0)\n+5203AA Compression Method    0000 (0) 'Stored'\n+5203AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5203B0 CRC                   00000000 (0)\n+5203B4 Compressed Size       00000000 (0)\n+5203B8 Uncompressed Size     00000000 (0)\n+5203BC Filename Length       0072 (114)\n+5203BE Extra Length          0009 (9)\n+5203C0 Comment Length        0000 (0)\n+5203C2 Disk Start            0000 (0)\n+5203C4 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5203C6 Ext File Attributes   00000000 (0)\n+5203CA Local Header Offset   00106E1C (1076764)\n+5203CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5203CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520442   Length              0005 (5)\n+520444   Flags               01 (1) 'Modification'\n+520445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520449 CENTRAL HEADER #385   02014B50 (33639248)\n+52044D Created Zip Spec      14 (20) '2.0'\n+52044E Created OS            00 (0) 'MS-DOS'\n+52044F Extract Zip Spec      14 (20) '2.0'\n+520450 Extract OS            00 (0) 'MS-DOS'\n+520451 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520453 Compression Method    0000 (0) 'Stored'\n+520455 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520459 CRC                   17E2323C (400699964)\n+52045D Compressed Size       00000904 (2308)\n+520461 Uncompressed Size     00000904 (2308)\n+520465 Filename Length       0088 (136)\n+520467 Extra Length          0009 (9)\n+520469 Comment Length        0000 (0)\n+52046B Disk Start            0000 (0)\n+52046D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52046F Ext File Attributes   00000000 (0)\n+520473 Local Header Offset   00106EB5 (1076917)\n+520477 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXX'\n #\n-# WARNING: Offset 0x5204F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x520477: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-520580 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520582   Length              0005 (5)\n-520584   Flags               01 (1) 'Modification'\n-520585   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520589 CENTRAL HEADER #386   02014B50 (33639248)\n-52058D Created Zip Spec      14 (20) '2.0'\n-52058E Created OS            00 (0) 'MS-DOS'\n-52058F Extract Zip Spec      14 (20) '2.0'\n-520590 Extract OS            00 (0) 'MS-DOS'\n-520591 General Purpose Flag  0000 (0)\n-520593 Compression Method    0000 (0) 'Stored'\n-520595 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520599 CRC                   00000000 (0)\n-52059D Compressed Size       00000000 (0)\n-5205A1 Uncompressed Size     00000000 (0)\n-5205A5 Filename Length       0030 (48)\n-5205A7 Extra Length          0009 (9)\n-5205A9 Comment Length        0000 (0)\n-5205AB Disk Start            0000 (0)\n-5205AD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5205AF Ext File Attributes   00000000 (0)\n-5205B3 Local Header Offset   001078E1 (1079521)\n-5205B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5205B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5205E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5205E9   Length              0005 (5)\n-5205EB   Flags               01 (1) 'Modification'\n-5205EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5205F0 CENTRAL HEADER #387   02014B50 (33639248)\n-5205F4 Created Zip Spec      14 (20) '2.0'\n-5205F5 Created OS            00 (0) 'MS-DOS'\n-5205F6 Extract Zip Spec      14 (20) '2.0'\n-5205F7 Extract OS            00 (0) 'MS-DOS'\n-5205F8 General Purpose Flag  0000 (0)\n-5205FA Compression Method    0000 (0) 'Stored'\n-5205FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520600 CRC                   00000000 (0)\n-520604 Compressed Size       00000000 (0)\n-520608 Uncompressed Size     00000000 (0)\n-52060C Filename Length       0039 (57)\n-52060E Extra Length          0009 (9)\n-520610 Comment Length        0000 (0)\n-520612 Disk Start            0000 (0)\n-520614 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520616 Ext File Attributes   00000000 (0)\n-52061A Local Header Offset   00107938 (1079608)\n-52061E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52061E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520657 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520659   Length              0005 (5)\n-52065B   Flags               01 (1) 'Modification'\n-52065C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520660 CENTRAL HEADER #388   02014B50 (33639248)\n-520664 Created Zip Spec      14 (20) '2.0'\n-520665 Created OS            00 (0) 'MS-DOS'\n-520666 Extract Zip Spec      14 (20) '2.0'\n-520667 Extract OS            00 (0) 'MS-DOS'\n-520668 General Purpose Flag  0000 (0)\n-52066A Compression Method    0000 (0) 'Stored'\n-52066C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520670 CRC                   00000000 (0)\n-520674 Compressed Size       00000000 (0)\n-520678 Uncompressed Size     00000000 (0)\n-52067C Filename Length       007D (125)\n-52067E Extra Length          0009 (9)\n-520680 Comment Length        0000 (0)\n-520682 Disk Start            0000 (0)\n-520684 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520686 Ext File Attributes   00000000 (0)\n-52068A Local Header Offset   00107998 (1079704)\n-52068E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52068E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52070B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52070D   Length              0005 (5)\n-52070F   Flags               01 (1) 'Modification'\n-520710   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520714 CENTRAL HEADER #389   02014B50 (33639248)\n-520718 Created Zip Spec      14 (20) '2.0'\n-520719 Created OS            00 (0) 'MS-DOS'\n-52071A Extract Zip Spec      14 (20) '2.0'\n-52071B Extract OS            00 (0) 'MS-DOS'\n-52071C General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-52071E Compression Method    0000 (0) 'Stored'\n-520720 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520724 CRC                   CC28EBBC (3425233852)\n-520728 Compressed Size       00001036 (4150)\n-52072C Uncompressed Size     00001036 (4150)\n-520730 Filename Length       0093 (147)\n-520732 Extra Length          0009 (9)\n-520734 Comment Length        0000 (0)\n-520736 Disk Start            0000 (0)\n-520738 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52073A Ext File Attributes   00000000 (0)\n-52073E Local Header Offset   00107A3C (1079868)\n-520742 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5204FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520501   Length              0005 (5)\n+520503   Flags               01 (1) 'Modification'\n+520504   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520508 CENTRAL HEADER #386   02014B50 (33639248)\n+52050C Created Zip Spec      14 (20) '2.0'\n+52050D Created OS            00 (0) 'MS-DOS'\n+52050E Extract Zip Spec      14 (20) '2.0'\n+52050F Extract OS            00 (0) 'MS-DOS'\n+520510 General Purpose Flag  0000 (0)\n+520512 Compression Method    0000 (0) 'Stored'\n+520514 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520518 CRC                   00000000 (0)\n+52051C Compressed Size       00000000 (0)\n+520520 Uncompressed Size     00000000 (0)\n+520524 Filename Length       0030 (48)\n+520526 Extra Length          0009 (9)\n+520528 Comment Length        0000 (0)\n+52052A Disk Start            0000 (0)\n+52052C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52052E Ext File Attributes   00000000 (0)\n+520532 Local Header Offset   00107878 (1079416)\n+520536 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520536: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520566 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520568   Length              0005 (5)\n+52056A   Flags               01 (1) 'Modification'\n+52056B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52056F CENTRAL HEADER #387   02014B50 (33639248)\n+520573 Created Zip Spec      14 (20) '2.0'\n+520574 Created OS            00 (0) 'MS-DOS'\n+520575 Extract Zip Spec      14 (20) '2.0'\n+520576 Extract OS            00 (0) 'MS-DOS'\n+520577 General Purpose Flag  0000 (0)\n+520579 Compression Method    0000 (0) 'Stored'\n+52057B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52057F CRC                   00000000 (0)\n+520583 Compressed Size       00000000 (0)\n+520587 Uncompressed Size     00000000 (0)\n+52058B Filename Length       0039 (57)\n+52058D Extra Length          0009 (9)\n+52058F Comment Length        0000 (0)\n+520591 Disk Start            0000 (0)\n+520593 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520595 Ext File Attributes   00000000 (0)\n+520599 Local Header Offset   001078CF (1079503)\n+52059D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52059D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5205D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5205D8   Length              0005 (5)\n+5205DA   Flags               01 (1) 'Modification'\n+5205DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5205DF CENTRAL HEADER #388   02014B50 (33639248)\n+5205E3 Created Zip Spec      14 (20) '2.0'\n+5205E4 Created OS            00 (0) 'MS-DOS'\n+5205E5 Extract Zip Spec      14 (20) '2.0'\n+5205E6 Extract OS            00 (0) 'MS-DOS'\n+5205E7 General Purpose Flag  0000 (0)\n+5205E9 Compression Method    0000 (0) 'Stored'\n+5205EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5205EF CRC                   00000000 (0)\n+5205F3 Compressed Size       00000000 (0)\n+5205F7 Uncompressed Size     00000000 (0)\n+5205FB Filename Length       007D (125)\n+5205FD Extra Length          0009 (9)\n+5205FF Comment Length        0000 (0)\n+520601 Disk Start            0000 (0)\n+520603 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520605 Ext File Attributes   00000000 (0)\n+520609 Local Header Offset   0010792F (1079599)\n+52060D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52060D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52068A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52068C   Length              0005 (5)\n+52068E   Flags               01 (1) 'Modification'\n+52068F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520693 CENTRAL HEADER #389   02014B50 (33639248)\n+520697 Created Zip Spec      14 (20) '2.0'\n+520698 Created OS            00 (0) 'MS-DOS'\n+520699 Extract Zip Spec      14 (20) '2.0'\n+52069A Extract OS            00 (0) 'MS-DOS'\n+52069B General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+52069D Compression Method    0000 (0) 'Stored'\n+52069F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5206A3 CRC                   CC28EBBC (3425233852)\n+5206A7 Compressed Size       00001036 (4150)\n+5206AB Uncompressed Size     00001036 (4150)\n+5206AF Filename Length       0093 (147)\n+5206B1 Extra Length          0009 (9)\n+5206B3 Comment Length        0000 (0)\n+5206B5 Disk Start            0000 (0)\n+5206B7 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5206B9 Ext File Attributes   00000000 (0)\n+5206BD Local Header Offset   001079D3 (1079763)\n+5206C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x520742: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5206C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5207D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5207D7   Length              0005 (5)\n-5207D9   Flags               01 (1) 'Modification'\n-5207DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5207DE CENTRAL HEADER #390   02014B50 (33639248)\n-5207E2 Created Zip Spec      14 (20) '2.0'\n-5207E3 Created OS            00 (0) 'MS-DOS'\n-5207E4 Extract Zip Spec      14 (20) '2.0'\n-5207E5 Extract OS            00 (0) 'MS-DOS'\n-5207E6 General Purpose Flag  0000 (0)\n-5207E8 Compression Method    0000 (0) 'Stored'\n-5207EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5207EE CRC                   00000000 (0)\n-5207F2 Compressed Size       00000000 (0)\n-5207F6 Uncompressed Size     00000000 (0)\n-5207FA Filename Length       0031 (49)\n-5207FC Extra Length          0009 (9)\n-5207FE Comment Length        0000 (0)\n-520800 Disk Start            0000 (0)\n-520802 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520804 Ext File Attributes   00000000 (0)\n-520808 Local Header Offset   00108B3C (1084220)\n-52080C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52080C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-52083D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52083F   Length              0005 (5)\n-520841   Flags               01 (1) 'Modification'\n-520842   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520846 CENTRAL HEADER #391   02014B50 (33639248)\n-52084A Created Zip Spec      14 (20) '2.0'\n-52084B Created OS            00 (0) 'MS-DOS'\n-52084C Extract Zip Spec      14 (20) '2.0'\n-52084D Extract OS            00 (0) 'MS-DOS'\n-52084E General Purpose Flag  0000 (0)\n-520850 Compression Method    0000 (0) 'Stored'\n-520852 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520856 CRC                   00000000 (0)\n-52085A Compressed Size       00000000 (0)\n-52085E Uncompressed Size     00000000 (0)\n-520862 Filename Length       003A (58)\n-520864 Extra Length          0009 (9)\n-520866 Comment Length        0000 (0)\n-520868 Disk Start            0000 (0)\n-52086A Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-52086C Ext File Attributes   00000000 (0)\n-520870 Local Header Offset   00108B94 (1084308)\n-520874 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520874: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5208AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5208B0   Length              0005 (5)\n-5208B2   Flags               01 (1) 'Modification'\n-5208B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5208B7 CENTRAL HEADER #392   02014B50 (33639248)\n-5208BB Created Zip Spec      14 (20) '2.0'\n-5208BC Created OS            00 (0) 'MS-DOS'\n-5208BD Extract Zip Spec      14 (20) '2.0'\n-5208BE Extract OS            00 (0) 'MS-DOS'\n-5208BF General Purpose Flag  0000 (0)\n-5208C1 Compression Method    0000 (0) 'Stored'\n-5208C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5208C7 CRC                   00000000 (0)\n-5208CB Compressed Size       00000000 (0)\n-5208CF Uncompressed Size     00000000 (0)\n-5208D3 Filename Length       006E (110)\n-5208D5 Extra Length          0009 (9)\n-5208D7 Comment Length        0000 (0)\n-5208D9 Disk Start            0000 (0)\n-5208DB Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-5208DD Ext File Attributes   00000000 (0)\n-5208E1 Local Header Offset   00108BF5 (1084405)\n-5208E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5208E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520953 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520955   Length              0005 (5)\n-520957   Flags               01 (1) 'Modification'\n-520958   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52095C CENTRAL HEADER #393   02014B50 (33639248)\n-520960 Created Zip Spec      14 (20) '2.0'\n-520961 Created OS            00 (0) 'MS-DOS'\n-520962 Extract Zip Spec      14 (20) '2.0'\n-520963 Extract OS            00 (0) 'MS-DOS'\n-520964 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520966 Compression Method    0000 (0) 'Stored'\n-520968 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52096C CRC                   3FC95820 (1070159904)\n-520970 Compressed Size       00000AD4 (2772)\n-520974 Uncompressed Size     00000AD4 (2772)\n-520978 Filename Length       0084 (132)\n-52097A Extra Length          0009 (9)\n-52097C Comment Length        0000 (0)\n-52097E Disk Start            0000 (0)\n-520980 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520982 Ext File Attributes   00000000 (0)\n-520986 Local Header Offset   00108C8A (1084554)\n-52098A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+520754 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520756   Length              0005 (5)\n+520758   Flags               01 (1) 'Modification'\n+520759   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+52075D CENTRAL HEADER #390   02014B50 (33639248)\n+520761 Created Zip Spec      14 (20) '2.0'\n+520762 Created OS            00 (0) 'MS-DOS'\n+520763 Extract Zip Spec      14 (20) '2.0'\n+520764 Extract OS            00 (0) 'MS-DOS'\n+520765 General Purpose Flag  0000 (0)\n+520767 Compression Method    0000 (0) 'Stored'\n+520769 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+52076D CRC                   00000000 (0)\n+520771 Compressed Size       00000000 (0)\n+520775 Uncompressed Size     00000000 (0)\n+520779 Filename Length       0031 (49)\n+52077B Extra Length          0009 (9)\n+52077D Comment Length        0000 (0)\n+52077F Disk Start            0000 (0)\n+520781 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520783 Ext File Attributes   00000000 (0)\n+520787 Local Header Offset   00108AD3 (1084115)\n+52078B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x52078B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5207BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5207BE   Length              0005 (5)\n+5207C0   Flags               01 (1) 'Modification'\n+5207C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5207C5 CENTRAL HEADER #391   02014B50 (33639248)\n+5207C9 Created Zip Spec      14 (20) '2.0'\n+5207CA Created OS            00 (0) 'MS-DOS'\n+5207CB Extract Zip Spec      14 (20) '2.0'\n+5207CC Extract OS            00 (0) 'MS-DOS'\n+5207CD General Purpose Flag  0000 (0)\n+5207CF Compression Method    0000 (0) 'Stored'\n+5207D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5207D5 CRC                   00000000 (0)\n+5207D9 Compressed Size       00000000 (0)\n+5207DD Uncompressed Size     00000000 (0)\n+5207E1 Filename Length       003A (58)\n+5207E3 Extra Length          0009 (9)\n+5207E5 Comment Length        0000 (0)\n+5207E7 Disk Start            0000 (0)\n+5207E9 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5207EB Ext File Attributes   00000000 (0)\n+5207EF Local Header Offset   00108B2B (1084203)\n+5207F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5207F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+52082D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52082F   Length              0005 (5)\n+520831   Flags               01 (1) 'Modification'\n+520832   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520836 CENTRAL HEADER #392   02014B50 (33639248)\n+52083A Created Zip Spec      14 (20) '2.0'\n+52083B Created OS            00 (0) 'MS-DOS'\n+52083C Extract Zip Spec      14 (20) '2.0'\n+52083D Extract OS            00 (0) 'MS-DOS'\n+52083E General Purpose Flag  0000 (0)\n+520840 Compression Method    0000 (0) 'Stored'\n+520842 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520846 CRC                   00000000 (0)\n+52084A Compressed Size       00000000 (0)\n+52084E Uncompressed Size     00000000 (0)\n+520852 Filename Length       006E (110)\n+520854 Extra Length          0009 (9)\n+520856 Comment Length        0000 (0)\n+520858 Disk Start            0000 (0)\n+52085A Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+52085C Ext File Attributes   00000000 (0)\n+520860 Local Header Offset   00108B8C (1084300)\n+520864 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520864: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5208D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5208D4   Length              0005 (5)\n+5208D6   Flags               01 (1) 'Modification'\n+5208D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5208DB CENTRAL HEADER #393   02014B50 (33639248)\n+5208DF Created Zip Spec      14 (20) '2.0'\n+5208E0 Created OS            00 (0) 'MS-DOS'\n+5208E1 Extract Zip Spec      14 (20) '2.0'\n+5208E2 Extract OS            00 (0) 'MS-DOS'\n+5208E3 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+5208E5 Compression Method    0000 (0) 'Stored'\n+5208E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5208EB CRC                   3FC95820 (1070159904)\n+5208EF Compressed Size       00000AD4 (2772)\n+5208F3 Uncompressed Size     00000AD4 (2772)\n+5208F7 Filename Length       0084 (132)\n+5208F9 Extra Length          0009 (9)\n+5208FB Comment Length        0000 (0)\n+5208FD Disk Start            0000 (0)\n+5208FF Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520901 Ext File Attributes   00000000 (0)\n+520905 Local Header Offset   00108C21 (1084449)\n+520909 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                              '\n #\n-# WARNING: Offset 0x52098A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x520909: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-520A0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520A10   Length              0005 (5)\n-520A12   Flags               01 (1) 'Modification'\n-520A13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520A17 CENTRAL HEADER #394   02014B50 (33639248)\n-520A1B Created Zip Spec      14 (20) '2.0'\n-520A1C Created OS            00 (0) 'MS-DOS'\n-520A1D Extract Zip Spec      14 (20) '2.0'\n-520A1E Extract OS            00 (0) 'MS-DOS'\n-520A1F General Purpose Flag  0000 (0)\n-520A21 Compression Method    0000 (0) 'Stored'\n-520A23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520A27 CRC                   00000000 (0)\n-520A2B Compressed Size       00000000 (0)\n-520A2F Uncompressed Size     00000000 (0)\n-520A33 Filename Length       0026 (38)\n-520A35 Extra Length          0009 (9)\n-520A37 Comment Length        0000 (0)\n-520A39 Disk Start            0000 (0)\n-520A3B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520A3D Ext File Attributes   00000000 (0)\n-520A41 Local Header Offset   00109819 (1087513)\n-520A45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520A45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520A6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520A6D   Length              0005 (5)\n-520A6F   Flags               01 (1) 'Modification'\n-520A70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520A74 CENTRAL HEADER #395   02014B50 (33639248)\n-520A78 Created Zip Spec      14 (20) '2.0'\n-520A79 Created OS            00 (0) 'MS-DOS'\n-520A7A Extract Zip Spec      14 (20) '2.0'\n-520A7B Extract OS            00 (0) 'MS-DOS'\n-520A7C General Purpose Flag  0000 (0)\n-520A7E Compression Method    0000 (0) 'Stored'\n-520A80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520A84 CRC                   00000000 (0)\n-520A88 Compressed Size       00000000 (0)\n-520A8C Uncompressed Size     00000000 (0)\n-520A90 Filename Length       002F (47)\n-520A92 Extra Length          0009 (9)\n-520A94 Comment Length        0000 (0)\n-520A96 Disk Start            0000 (0)\n-520A98 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520A9A Ext File Attributes   00000000 (0)\n-520A9E Local Header Offset   00109866 (1087590)\n-520AA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520AA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520AD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520AD3   Length              0005 (5)\n-520AD5   Flags               01 (1) 'Modification'\n-520AD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520ADA CENTRAL HEADER #396   02014B50 (33639248)\n-520ADE Created Zip Spec      14 (20) '2.0'\n-520ADF Created OS            00 (0) 'MS-DOS'\n-520AE0 Extract Zip Spec      14 (20) '2.0'\n-520AE1 Extract OS            00 (0) 'MS-DOS'\n-520AE2 General Purpose Flag  0000 (0)\n-520AE4 Compression Method    0000 (0) 'Stored'\n-520AE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520AEA CRC                   00000000 (0)\n-520AEE Compressed Size       00000000 (0)\n-520AF2 Uncompressed Size     00000000 (0)\n-520AF6 Filename Length       005D (93)\n-520AF8 Extra Length          0009 (9)\n-520AFA Comment Length        0000 (0)\n-520AFC Disk Start            0000 (0)\n-520AFE Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520B00 Ext File Attributes   00000000 (0)\n-520B04 Local Header Offset   001098BC (1087676)\n-520B08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520B08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520B65 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520B67   Length              0005 (5)\n-520B69   Flags               01 (1) 'Modification'\n-520B6A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520B6E CENTRAL HEADER #397   02014B50 (33639248)\n-520B72 Created Zip Spec      14 (20) '2.0'\n-520B73 Created OS            00 (0) 'MS-DOS'\n-520B74 Extract Zip Spec      14 (20) '2.0'\n-520B75 Extract OS            00 (0) 'MS-DOS'\n-520B76 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520B78 Compression Method    0000 (0) 'Stored'\n-520B7A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520B7E CRC                   41CBDE11 (1103879697)\n-520B82 Compressed Size       00000D2F (3375)\n-520B86 Uncompressed Size     00000D2F (3375)\n-520B8A Filename Length       0073 (115)\n-520B8C Extra Length          0009 (9)\n-520B8E Comment Length        0000 (0)\n-520B90 Disk Start            0000 (0)\n-520B92 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520B94 Ext File Attributes   00000000 (0)\n-520B98 Local Header Offset   00109940 (1087808)\n-520B9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520B9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520C0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520C11   Length              0005 (5)\n-520C13   Flags               01 (1) 'Modification'\n-520C14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520C18 CENTRAL HEADER #398   02014B50 (33639248)\n-520C1C Created Zip Spec      14 (20) '2.0'\n-520C1D Created OS            00 (0) 'MS-DOS'\n-520C1E Extract Zip Spec      14 (20) '2.0'\n-520C1F Extract OS            00 (0) 'MS-DOS'\n-520C20 General Purpose Flag  0000 (0)\n-520C22 Compression Method    0000 (0) 'Stored'\n-520C24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520C28 CRC                   00000000 (0)\n-520C2C Compressed Size       00000000 (0)\n-520C30 Uncompressed Size     00000000 (0)\n-520C34 Filename Length       0063 (99)\n-520C36 Extra Length          0009 (9)\n-520C38 Comment Length        0000 (0)\n-520C3A Disk Start            0000 (0)\n-520C3C Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520C3E Ext File Attributes   00000000 (0)\n-520C42 Local Header Offset   0010A719 (1091353)\n-520C46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520C46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520CA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520CAB   Length              0005 (5)\n-520CAD   Flags               01 (1) 'Modification'\n-520CAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520CB2 CENTRAL HEADER #399   02014B50 (33639248)\n-520CB6 Created Zip Spec      14 (20) '2.0'\n-520CB7 Created OS            00 (0) 'MS-DOS'\n-520CB8 Extract Zip Spec      14 (20) '2.0'\n-520CB9 Extract OS            00 (0) 'MS-DOS'\n-520CBA General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520CBC Compression Method    0000 (0) 'Stored'\n-520CBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520CC2 CRC                   1D768ED5 (494309077)\n-520CC6 Compressed Size       00001C79 (7289)\n-520CCA Uncompressed Size     00001C79 (7289)\n-520CCE Filename Length       0079 (121)\n-520CD0 Extra Length          0009 (9)\n-520CD2 Comment Length        0000 (0)\n-520CD4 Disk Start            0000 (0)\n-520CD6 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520CD8 Ext File Attributes   00000000 (0)\n-520CDC Local Header Offset   0010A7A3 (1091491)\n-520CE0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520CE0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520D59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520D5B   Length              0005 (5)\n-520D5D   Flags               01 (1) 'Modification'\n-520D5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520D62 CENTRAL HEADER #400   02014B50 (33639248)\n-520D66 Created Zip Spec      14 (20) '2.0'\n-520D67 Created OS            00 (0) 'MS-DOS'\n-520D68 Extract Zip Spec      14 (20) '2.0'\n-520D69 Extract OS            00 (0) 'MS-DOS'\n-520D6A General Purpose Flag  0000 (0)\n-520D6C Compression Method    0000 (0) 'Stored'\n-520D6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520D72 CRC                   00000000 (0)\n-520D76 Compressed Size       00000000 (0)\n-520D7A Uncompressed Size     00000000 (0)\n-520D7E Filename Length       002F (47)\n-520D80 Extra Length          0009 (9)\n-520D82 Comment Length        0000 (0)\n-520D84 Disk Start            0000 (0)\n-520D86 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520D88 Ext File Attributes   00000000 (0)\n-520D8C Local Header Offset   0010C4CC (1098956)\n-520D90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520D90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520DBF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520DC1   Length              0005 (5)\n-520DC3   Flags               01 (1) 'Modification'\n-520DC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520DC8 CENTRAL HEADER #401   02014B50 (33639248)\n-520DCC Created Zip Spec      14 (20) '2.0'\n-520DCD Created OS            00 (0) 'MS-DOS'\n-520DCE Extract Zip Spec      14 (20) '2.0'\n-520DCF Extract OS            00 (0) 'MS-DOS'\n-520DD0 General Purpose Flag  0000 (0)\n-520DD2 Compression Method    0000 (0) 'Stored'\n-520DD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520DD8 CRC                   00000000 (0)\n-520DDC Compressed Size       00000000 (0)\n-520DE0 Uncompressed Size     00000000 (0)\n-520DE4 Filename Length       0038 (56)\n-520DE6 Extra Length          0009 (9)\n-520DE8 Comment Length        0000 (0)\n-520DEA Disk Start            0000 (0)\n-520DEC Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520DEE Ext File Attributes   00000000 (0)\n-520DF2 Local Header Offset   0010C522 (1099042)\n-520DF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520DF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520E2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520E30   Length              0005 (5)\n-520E32   Flags               01 (1) 'Modification'\n-520E33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520E37 CENTRAL HEADER #402   02014B50 (33639248)\n-520E3B Created Zip Spec      14 (20) '2.0'\n-520E3C Created OS            00 (0) 'MS-DOS'\n-520E3D Extract Zip Spec      14 (20) '2.0'\n-520E3E Extract OS            00 (0) 'MS-DOS'\n-520E3F General Purpose Flag  0000 (0)\n-520E41 Compression Method    0000 (0) 'Stored'\n-520E43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520E47 CRC                   00000000 (0)\n-520E4B Compressed Size       00000000 (0)\n-520E4F Uncompressed Size     00000000 (0)\n-520E53 Filename Length       006B (107)\n-520E55 Extra Length          0009 (9)\n-520E57 Comment Length        0000 (0)\n-520E59 Disk Start            0000 (0)\n-520E5B Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520E5D Ext File Attributes   00000000 (0)\n-520E61 Local Header Offset   0010C581 (1099137)\n-520E65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520E65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520ED0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520ED2   Length              0005 (5)\n-520ED4   Flags               01 (1) 'Modification'\n-520ED5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520ED9 CENTRAL HEADER #403   02014B50 (33639248)\n-520EDD Created Zip Spec      14 (20) '2.0'\n-520EDE Created OS            00 (0) 'MS-DOS'\n-520EDF Extract Zip Spec      14 (20) '2.0'\n-520EE0 Extract OS            00 (0) 'MS-DOS'\n-520EE1 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520EE3 Compression Method    0000 (0) 'Stored'\n-520EE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520EE9 CRC                   7A85C658 (2055587416)\n-520EED Compressed Size       00001D19 (7449)\n-520EF1 Uncompressed Size     00001D19 (7449)\n-520EF5 Filename Length       0081 (129)\n-520EF7 Extra Length          0009 (9)\n-520EF9 Comment Length        0000 (0)\n-520EFB Disk Start            0000 (0)\n-520EFD Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520EFF Ext File Attributes   00000000 (0)\n-520F03 Local Header Offset   0010C613 (1099283)\n-520F07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520F07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520F88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520F8A   Length              0005 (5)\n-520F8C   Flags               01 (1) 'Modification'\n-520F8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520F91 CENTRAL HEADER #404   02014B50 (33639248)\n-520F95 Created Zip Spec      14 (20) '2.0'\n-520F96 Created OS            00 (0) 'MS-DOS'\n-520F97 Extract Zip Spec      14 (20) '2.0'\n-520F98 Extract OS            00 (0) 'MS-DOS'\n-520F99 General Purpose Flag  0008 (8)\n-       [Bit  3]              1 'Streamed'\n-520F9B Compression Method    0000 (0) 'Stored'\n-520F9D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-520FA1 CRC                   C398FE25 (3281583653)\n-520FA5 Compressed Size       00403BAB (4209579)\n-520FA9 Uncompressed Size     00403BAB (4209579)\n-520FAD Filename Length       001A (26)\n-520FAF Extra Length          0009 (9)\n-520FB1 Comment Length        0000 (0)\n-520FB3 Disk Start            0000 (0)\n-520FB5 Int File Attributes   0000 (0)\n-       [Bit 0]               0 'Binary Data'\n-520FB7 Ext File Attributes   00000000 (0)\n-520FBB Local Header Offset   0010E3E4 (1106916)\n-520FBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x520FBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-520FD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-520FDB   Length              0005 (5)\n-520FDD   Flags               01 (1) 'Modification'\n-520FDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-520FE2 END CENTRAL HEADER    06054B50 (101010256)\n-520FE6 Number of this disk   0000 (0)\n-520FE8 Central Dir Disk no   0000 (0)\n-520FEA Entries in this disk  0194 (404)\n-520FEC Total Entries         0194 (404)\n-520FEE Size of Central Dir   0000F002 (61442)\n-520FF2 Offset to Central Dir 00511FE0 (5316576)\n-520FF6 Comment Length        0000 (0)\n+52098D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+52098F   Length              0005 (5)\n+520991   Flags               01 (1) 'Modification'\n+520992   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520996 CENTRAL HEADER #394   02014B50 (33639248)\n+52099A Created Zip Spec      14 (20) '2.0'\n+52099B Created OS            00 (0) 'MS-DOS'\n+52099C Extract Zip Spec      14 (20) '2.0'\n+52099D Extract OS            00 (0) 'MS-DOS'\n+52099E General Purpose Flag  0000 (0)\n+5209A0 Compression Method    0000 (0) 'Stored'\n+5209A2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5209A6 CRC                   00000000 (0)\n+5209AA Compressed Size       00000000 (0)\n+5209AE Uncompressed Size     00000000 (0)\n+5209B2 Filename Length       0026 (38)\n+5209B4 Extra Length          0009 (9)\n+5209B6 Comment Length        0000 (0)\n+5209B8 Disk Start            0000 (0)\n+5209BA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+5209BC Ext File Attributes   00000000 (0)\n+5209C0 Local Header Offset   001097B0 (1087408)\n+5209C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5209C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5209EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5209EC   Length              0005 (5)\n+5209EE   Flags               01 (1) 'Modification'\n+5209EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5209F3 CENTRAL HEADER #395   02014B50 (33639248)\n+5209F7 Created Zip Spec      14 (20) '2.0'\n+5209F8 Created OS            00 (0) 'MS-DOS'\n+5209F9 Extract Zip Spec      14 (20) '2.0'\n+5209FA Extract OS            00 (0) 'MS-DOS'\n+5209FB General Purpose Flag  0000 (0)\n+5209FD Compression Method    0000 (0) 'Stored'\n+5209FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520A03 CRC                   00000000 (0)\n+520A07 Compressed Size       00000000 (0)\n+520A0B Uncompressed Size     00000000 (0)\n+520A0F Filename Length       002F (47)\n+520A11 Extra Length          0009 (9)\n+520A13 Comment Length        0000 (0)\n+520A15 Disk Start            0000 (0)\n+520A17 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520A19 Ext File Attributes   00000000 (0)\n+520A1D Local Header Offset   001097FD (1087485)\n+520A21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520A21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520A50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520A52   Length              0005 (5)\n+520A54   Flags               01 (1) 'Modification'\n+520A55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520A59 CENTRAL HEADER #396   02014B50 (33639248)\n+520A5D Created Zip Spec      14 (20) '2.0'\n+520A5E Created OS            00 (0) 'MS-DOS'\n+520A5F Extract Zip Spec      14 (20) '2.0'\n+520A60 Extract OS            00 (0) 'MS-DOS'\n+520A61 General Purpose Flag  0000 (0)\n+520A63 Compression Method    0000 (0) 'Stored'\n+520A65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520A69 CRC                   00000000 (0)\n+520A6D Compressed Size       00000000 (0)\n+520A71 Uncompressed Size     00000000 (0)\n+520A75 Filename Length       005D (93)\n+520A77 Extra Length          0009 (9)\n+520A79 Comment Length        0000 (0)\n+520A7B Disk Start            0000 (0)\n+520A7D Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520A7F Ext File Attributes   00000000 (0)\n+520A83 Local Header Offset   00109853 (1087571)\n+520A87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520A87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520AE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520AE6   Length              0005 (5)\n+520AE8   Flags               01 (1) 'Modification'\n+520AE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520AED CENTRAL HEADER #397   02014B50 (33639248)\n+520AF1 Created Zip Spec      14 (20) '2.0'\n+520AF2 Created OS            00 (0) 'MS-DOS'\n+520AF3 Extract Zip Spec      14 (20) '2.0'\n+520AF4 Extract OS            00 (0) 'MS-DOS'\n+520AF5 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520AF7 Compression Method    0000 (0) 'Stored'\n+520AF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520AFD CRC                   41CBDE11 (1103879697)\n+520B01 Compressed Size       00000D2F (3375)\n+520B05 Uncompressed Size     00000D2F (3375)\n+520B09 Filename Length       0073 (115)\n+520B0B Extra Length          0009 (9)\n+520B0D Comment Length        0000 (0)\n+520B0F Disk Start            0000 (0)\n+520B11 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520B13 Ext File Attributes   00000000 (0)\n+520B17 Local Header Offset   001098D7 (1087703)\n+520B1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520B1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520B8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520B90   Length              0005 (5)\n+520B92   Flags               01 (1) 'Modification'\n+520B93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520B97 CENTRAL HEADER #398   02014B50 (33639248)\n+520B9B Created Zip Spec      14 (20) '2.0'\n+520B9C Created OS            00 (0) 'MS-DOS'\n+520B9D Extract Zip Spec      14 (20) '2.0'\n+520B9E Extract OS            00 (0) 'MS-DOS'\n+520B9F General Purpose Flag  0000 (0)\n+520BA1 Compression Method    0000 (0) 'Stored'\n+520BA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520BA7 CRC                   00000000 (0)\n+520BAB Compressed Size       00000000 (0)\n+520BAF Uncompressed Size     00000000 (0)\n+520BB3 Filename Length       0063 (99)\n+520BB5 Extra Length          0009 (9)\n+520BB7 Comment Length        0000 (0)\n+520BB9 Disk Start            0000 (0)\n+520BBB Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520BBD Ext File Attributes   00000000 (0)\n+520BC1 Local Header Offset   0010A6B0 (1091248)\n+520BC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520BC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520C2A   Length              0005 (5)\n+520C2C   Flags               01 (1) 'Modification'\n+520C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520C31 CENTRAL HEADER #399   02014B50 (33639248)\n+520C35 Created Zip Spec      14 (20) '2.0'\n+520C36 Created OS            00 (0) 'MS-DOS'\n+520C37 Extract Zip Spec      14 (20) '2.0'\n+520C38 Extract OS            00 (0) 'MS-DOS'\n+520C39 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520C3B Compression Method    0000 (0) 'Stored'\n+520C3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520C41 CRC                   1D768ED5 (494309077)\n+520C45 Compressed Size       00001C79 (7289)\n+520C49 Uncompressed Size     00001C79 (7289)\n+520C4D Filename Length       0079 (121)\n+520C4F Extra Length          0009 (9)\n+520C51 Comment Length        0000 (0)\n+520C53 Disk Start            0000 (0)\n+520C55 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520C57 Ext File Attributes   00000000 (0)\n+520C5B Local Header Offset   0010A73A (1091386)\n+520C5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520C5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520CD8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520CDA   Length              0005 (5)\n+520CDC   Flags               01 (1) 'Modification'\n+520CDD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520CE1 CENTRAL HEADER #400   02014B50 (33639248)\n+520CE5 Created Zip Spec      14 (20) '2.0'\n+520CE6 Created OS            00 (0) 'MS-DOS'\n+520CE7 Extract Zip Spec      14 (20) '2.0'\n+520CE8 Extract OS            00 (0) 'MS-DOS'\n+520CE9 General Purpose Flag  0000 (0)\n+520CEB Compression Method    0000 (0) 'Stored'\n+520CED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520CF1 CRC                   00000000 (0)\n+520CF5 Compressed Size       00000000 (0)\n+520CF9 Uncompressed Size     00000000 (0)\n+520CFD Filename Length       002F (47)\n+520CFF Extra Length          0009 (9)\n+520D01 Comment Length        0000 (0)\n+520D03 Disk Start            0000 (0)\n+520D05 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520D07 Ext File Attributes   00000000 (0)\n+520D0B Local Header Offset   0010C463 (1098851)\n+520D0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520D0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520D3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520D40   Length              0005 (5)\n+520D42   Flags               01 (1) 'Modification'\n+520D43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520D47 CENTRAL HEADER #401   02014B50 (33639248)\n+520D4B Created Zip Spec      14 (20) '2.0'\n+520D4C Created OS            00 (0) 'MS-DOS'\n+520D4D Extract Zip Spec      14 (20) '2.0'\n+520D4E Extract OS            00 (0) 'MS-DOS'\n+520D4F General Purpose Flag  0000 (0)\n+520D51 Compression Method    0000 (0) 'Stored'\n+520D53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520D57 CRC                   00000000 (0)\n+520D5B Compressed Size       00000000 (0)\n+520D5F Uncompressed Size     00000000 (0)\n+520D63 Filename Length       0038 (56)\n+520D65 Extra Length          0009 (9)\n+520D67 Comment Length        0000 (0)\n+520D69 Disk Start            0000 (0)\n+520D6B Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520D6D Ext File Attributes   00000000 (0)\n+520D71 Local Header Offset   0010C4B9 (1098937)\n+520D75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520D75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520DAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520DAF   Length              0005 (5)\n+520DB1   Flags               01 (1) 'Modification'\n+520DB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520DB6 CENTRAL HEADER #402   02014B50 (33639248)\n+520DBA Created Zip Spec      14 (20) '2.0'\n+520DBB Created OS            00 (0) 'MS-DOS'\n+520DBC Extract Zip Spec      14 (20) '2.0'\n+520DBD Extract OS            00 (0) 'MS-DOS'\n+520DBE General Purpose Flag  0000 (0)\n+520DC0 Compression Method    0000 (0) 'Stored'\n+520DC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520DC6 CRC                   00000000 (0)\n+520DCA Compressed Size       00000000 (0)\n+520DCE Uncompressed Size     00000000 (0)\n+520DD2 Filename Length       006B (107)\n+520DD4 Extra Length          0009 (9)\n+520DD6 Comment Length        0000 (0)\n+520DD8 Disk Start            0000 (0)\n+520DDA Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520DDC Ext File Attributes   00000000 (0)\n+520DE0 Local Header Offset   0010C518 (1099032)\n+520DE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520DE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520E4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520E51   Length              0005 (5)\n+520E53   Flags               01 (1) 'Modification'\n+520E54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520E58 CENTRAL HEADER #403   02014B50 (33639248)\n+520E5C Created Zip Spec      14 (20) '2.0'\n+520E5D Created OS            00 (0) 'MS-DOS'\n+520E5E Extract Zip Spec      14 (20) '2.0'\n+520E5F Extract OS            00 (0) 'MS-DOS'\n+520E60 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520E62 Compression Method    0000 (0) 'Stored'\n+520E64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520E68 CRC                   7A85C658 (2055587416)\n+520E6C Compressed Size       00001D19 (7449)\n+520E70 Uncompressed Size     00001D19 (7449)\n+520E74 Filename Length       0081 (129)\n+520E76 Extra Length          0009 (9)\n+520E78 Comment Length        0000 (0)\n+520E7A Disk Start            0000 (0)\n+520E7C Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520E7E Ext File Attributes   00000000 (0)\n+520E82 Local Header Offset   0010C5AA (1099178)\n+520E86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520E86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520F07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520F09   Length              0005 (5)\n+520F0B   Flags               01 (1) 'Modification'\n+520F0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520F10 CENTRAL HEADER #404   02014B50 (33639248)\n+520F14 Created Zip Spec      14 (20) '2.0'\n+520F15 Created OS            00 (0) 'MS-DOS'\n+520F16 Extract Zip Spec      14 (20) '2.0'\n+520F17 Extract OS            00 (0) 'MS-DOS'\n+520F18 General Purpose Flag  0008 (8)\n+       [Bit  3]              1 'Streamed'\n+520F1A Compression Method    0000 (0) 'Stored'\n+520F1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+520F20 CRC                   3FE1AA84 (1071753860)\n+520F24 Compressed Size       00403B93 (4209555)\n+520F28 Uncompressed Size     00403B93 (4209555)\n+520F2C Filename Length       001A (26)\n+520F2E Extra Length          0009 (9)\n+520F30 Comment Length        0000 (0)\n+520F32 Disk Start            0000 (0)\n+520F34 Int File Attributes   0000 (0)\n+       [Bit 0]               0 'Binary Data'\n+520F36 Ext File Attributes   00000000 (0)\n+520F3A Local Header Offset   0010E37B (1106811)\n+520F3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x520F3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+520F58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+520F5A   Length              0005 (5)\n+520F5C   Flags               01 (1) 'Modification'\n+520F5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+520F61 END CENTRAL HEADER    06054B50 (101010256)\n+520F65 Number of this disk   0000 (0)\n+520F67 Central Dir Disk no   0000 (0)\n+520F69 Entries in this disk  0194 (404)\n+520F6B Total Entries         0194 (404)\n+520F6D Size of Central Dir   0000F002 (61442)\n+520F71 Offset to Central Dir 00511F5F (5316447)\n+520F75 Comment Length        0000 (0)\n #\n # Warning Count: 808\n #\n # Done\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:2.0.0-M3\n Build-Branch:UNKNOWN\n Build-Revision:f2215c6\n-Build-Timestamp:2024-05-14T02:19:44Z\n-Built-By:exceptionfactory\n-Maven-Home:/home/exceptionfactory/.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:/home/exceptionfactory/Applications/zulu21.34.19-ca-jdk21.0.3-linux_x64\n-Build-Jdk:21.0.3\n-Build-Jdk-Vendor:Azul Systems, Inc.\n+Build-Timestamp:2025-01-29T22:38:46Z\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-21-openjdk-amd64\n+Build-Jdk:21.0.4\n+Build-Jdk-Vendor:Ubuntu\n Build-Arch:amd64\n Build-Os:Linux\n-Build-Os-Version:6.5.0-28-generic\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.9668552052282925%", "Differences: {\"'buildInfo'\": \"{'timestamp': 1738190326373, 'compiler': 'Ubuntu 21.0.4'}\",", " \"'bundles'\": \"{0: {'artifact': 'nifi-pgp-nar', 'componentManifest': {'controllerServices': [], \"", "              \"'processors': [OrderedDict({'group': 'org.apache.nifi', 'artifact': 'nifi-pgp-nar', \"", "              \"'version': '2.0.0-M3', 'type': 'org.apache.nifi.processors.pgp.DecryptContentPGP', \"", "              \"'typeDescription': 'Decrypt contents of OpenPGP messages. Using the Packaged \"", "              'Decryption Strategy preserv [\u2026]"], "unified_diff": "@@ -1,3604 +1,4096 @@\n {\n     \"agentType\": \"nifi\",\n     \"buildInfo\": {\n-        \"compiler\": \"Azul Systems, Inc. 21.0.3\",\n+        \"compiler\": \"Ubuntu 21.0.4\",\n         \"revision\": \"f2215c6\",\n-        \"timestamp\": 1715653184479,\n+        \"timestamp\": 1738190326373,\n         \"version\": \"2.0.0-M3\"\n     },\n     \"bundles\": [\n         {\n-            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+            \"artifact\": \"nifi-pgp-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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+                            \"TIMER_DRIVEN\": 1\n+                        },\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"api-key\": {\n-                                \"dependencies\": [\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-                                    {\n-                                        \"dependentValues\": [\n-                                            \"API_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"Unique identifier of the API key.\",\n-                                \"displayName\": \"API Key ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key-id\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\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\": \"authorization-scheme\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-charset\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-connect-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-enable-compression\": {\n+                            \"decryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n+                                        \"displayName\": \"DECRYPTED\",\n+                                        \"value\": \"DECRYPTED\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n+                                        \"displayName\": \"PACKAGED\",\n+                                        \"value\": \"PACKAGED\"\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+                                \"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\": \"el-cs-enable-compression\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-http-hosts\",\n+                                \"name\": \"decryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-node-selector\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n-                                        \"displayName\": \"Any\",\n-                                        \"value\": \"ANY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n-                                        \"displayName\": \"Skip Dedicated Masters\",\n-                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\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+                            \"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\": \"el-cs-node-selector\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-password\",\n+                                \"name\": \"passphrase\",\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+                            \"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\": \"el-cs-path-prefix\",\n+                                \"name\": \"private-key-service\",\n                                 \"required\": false,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\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+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption Succeeded\",\n+                                \"name\": \"success\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-send-meta-header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\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.pgp.DecryptContentPGP\",\n+                        \"typeDescription\": \"Decrypt contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves OpenPGP encoding to support subsequent signature verification.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Filename from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n-                            \"el-cs-sniff-cluster-nodes\": {\n-                                \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-cluster-nodes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Modified Date from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n-                            \"el-cs-sniff-failure\": {\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\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-                                    }\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-                                    }\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\": \"el-cs-sniff-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-sniffer-failure-delay\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff on Failure\",\n-                                        \"propertyName\": \"el-cs-sniff-failure\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"description\": \"Delay between an Elasticsearch request failure and updating available Cluster nodes using the Sniffer\",\n-                                \"displayName\": \"Sniffer Failure Delay\",\n+                                \"defaultValue\": \"BINARY\",\n+                                \"description\": \"File Encoding for encryption\",\n+                                \"displayName\": \"File Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniffer-failure-delay\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniffer-interval\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n-                                    }\n-                                ],\n-                                \"description\": \"Interval between Cluster sniffer operations\",\n-                                \"displayName\": \"Sniffer Interval\",\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\": \"el-cs-sniffer-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"el-cs-sniffer-request-timeout\": {\n-                                \"defaultValue\": \"1 sec\",\n+                            \"public-key-search\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n-                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                        \"propertyDisplayName\": \"Public Key Service\",\n+                                        \"propertyName\": \"public-key-service\"\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\": \"el-cs-sniffer-request-timeout\",\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+                                \"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\": \"el-cs-socket-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"public-key-search\",\n+                                \"required\": false,\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+                            \"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\": \"el-cs-ssl-context-service\",\n+                                \"name\": \"public-key-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.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"el-cs-strict-deprecation\": {\n+                            \"symmetric-key-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"AES_128\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-strict-deprecation\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-cs-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/empty, will be written out as a null/empty value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"AES_192\"\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\": \"\",\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"AES_256\"\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\": \"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\": \"el-cs-suppress-nulls\",\n+                                \"name\": \"symmetric-key-algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"el-cs-username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Scheme\",\n-                                        \"propertyName\": \"authorization-scheme\"\n-                                    }\n-                                ],\n-                                \"description\": \"The username to use with XPack security.\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"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\": \"2.0.0-M3\"\n-                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"Encryption Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Encryption Failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n-                        \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientServiceImpl\",\n-                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client, using the Elasticsearch (low-level) REST Client.\",\n-                        \"version\": \"2.0.0-M3\"\n+                        \"triggerSerially\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\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+                        \"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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"file-encoding\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"hash-algorithm\": {\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\": \"\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"SHA256\"\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\": \"SHA384\",\n+                                        \"value\": \"SHA384\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"SHA512\"\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\": \"SHA512\",\n+                                \"description\": \"Hash Algorithm for signing\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"hash-algorithm\",\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\": \"Environment variables 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"private-key-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                            \"signing-strategy\": {\n+                                \"allowableValues\": [\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n+                                        \"displayName\": \"SIGNED\",\n+                                        \"value\": \"SIGNED\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n+                                        \"displayName\": \"DETACHED\",\n+                                        \"value\": \"DETACHED\"\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+                                \"defaultValue\": \"SIGNED\",\n+                                \"description\": \"Strategy for writing files to success after signing\",\n+                                \"displayName\": \"Signing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"signing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"Content signing succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Content signing failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"lookup\",\n-                            \"record\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\n+                            {\n+                                \"description\": \"Signature Version Number\",\n+                                \"name\": \"pgp.signature.version\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"el-rest-client-service\",\n+                                \"name\": \"public-key-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"Signature Verification Succeeded\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"value\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-azure-nar\",\n+            \"artifact\": \"nifi-prometheus-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credential-configuration-strategy\": {\n+                            \"prometheus-reporting-task-client-auth\": {\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\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\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\": \"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\": \"default-credential\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Credential Configuration Strategy\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"credential-configuration-strategy\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"required\": true,\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+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"name\": \"prometheus-reporting-task-ssl-context\",\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.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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.AzureCredentialsService\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"credentials\",\n-                            \"provider\",\n-                            \"security\",\n-                            \"session\"\n+                            \"prometheus\",\n+                            \"record\",\n+                            \"send\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.StandardAzureCredentialsControllerService\",\n-                        \"typeDescription\": \"Provide credentials to use with an Azure client.\",\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"60 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"prometheus-reporting-task-client-auth\": {\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+                                        \"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\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\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\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\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\": \"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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n-                                \"required\": false,\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Application Client ID\": {\n-                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n-                                \"displayName\": \"Application Client ID\",\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\": \"Application Client ID\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-instance-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Application Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n-                                \"displayName\": \"Application Key\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Application Tenant ID\": {\n-                                \"dependencies\": [\n+                            \"prometheus-reporting-task-metrics-send-jvm\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n-                                \"displayName\": \"Application Tenant ID\",\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\": \"Application Tenant ID\",\n+                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Authentication Strategy\": {\n+                            \"prometheus-reporting-task-metrics-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Application Registration with Application Key\",\n-                                        \"displayName\": \"Application Credentials\",\n-                                        \"value\": \"APPLICATION_CREDENTIALS\"\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\": \"Azure Managed Identity\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\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\": \"MANAGED_IDENTITY\",\n-                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n-                                \"displayName\": \"Authentication Strategy\",\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\": \"Authentication Strategy\",\n+                                \"name\": \"prometheus-reporting-task-metrics-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cluster URI\": {\n-                                \"description\": \"Azure Data Explorer Cluster URI\",\n-                                \"displayName\": \"Cluster URI\",\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 URI\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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.ssl.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\",\n-                            \"azure\",\n-                            \"ingest\"\n+                            \"metrics\",\n+                            \"prometheus\",\n+                            \"reporting\",\n+                            \"time series data\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoIngestService\",\n-                        \"typeDescription\": \"Sends batches of flowfile content or stream flowfile content to an Azure ADX cluster.\",\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"20 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Application Client ID\": {\n-                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n-                                \"displayName\": \"Application Client ID\",\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\": \"Application Client ID\",\n+                                \"name\": \"web-client-service-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.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Application Key\": {\n-                                \"dependencies\": [\n+                            \"zendesk-authentication-type-name\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\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\": \"Azure Data Explorer Application Key for Authentication\",\n-                                \"displayName\": \"Application Key\",\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Application Tenant ID\": {\n-                                \"dependencies\": [\n+                            \"zendesk-export-method\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"APPLICATION_CREDENTIALS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\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\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n-                                \"displayName\": \"Application Tenant ID\",\n+                                \"description\": \"Method for incremental export.\",\n+                                \"displayName\": \"Export Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Tenant ID\",\n+                                \"name\": \"zendesk-export-method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Authentication Strategy\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"zendesk-resource\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Application Registration with Application Key\",\n-                                        \"displayName\": \"Application Credentials\",\n-                                        \"value\": \"APPLICATION_CREDENTIALS\"\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\": \"Azure Managed Identity\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\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\": \"MANAGED_IDENTITY\",\n-                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n-                                \"displayName\": \"Authentication Strategy\",\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\": \"Authentication Strategy\",\n+                                \"name\": \"zendesk-resource\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cluster URI\": {\n-                                \"description\": \"Azure Data Explorer Cluster URI\",\n-                                \"displayName\": \"Cluster URI\",\n+                            \"zendesk-subdomain\": {\n+                                \"description\": \"Name of the Zendesk subdomain.\",\n+                                \"displayName\": \"Subdomain Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster URI\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoQueryService\",\n-                                \"version\": \"2.0.0-M3\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"zendesk\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoQueryService\",\n-                        \"typeDescription\": \"Standard implementation of Kusto Query Service for Azure Data Explorer\",\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of records fetched by the processor.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Authentication Strategy\": {\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"zendesk-authentication-type-name\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Event Hub shared access key\",\n-                                        \"displayName\": \"Shared Access Key\",\n-                                        \"value\": \"SHARED_ACCESS_KEY\"\n+                                        \"description\": \"Password of Zendesk login user.\",\n+                                        \"displayName\": \"Password\",\n+                                        \"value\": \"password\"\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\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n+                                        \"displayName\": \"Token\",\n+                                        \"value\": \"token\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n-                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"description\": \"Type of authentication to Zendesk API.\",\n+                                \"displayName\": \"Authentication Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n+                                \"name\": \"zendesk-authentication-type-name\",\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+                            \"zendesk-authentication-value-name\": {\n+                                \"description\": \"Password or authentication token for Zendesk login user.\",\n+                                \"displayName\": \"Authentication Credential\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-authentication-value-name\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Provides provides the host for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Event Hub Namespace\",\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-comment-body\",\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+                            \"zendesk-priority\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Partition Key\",\n+                                \"name\": \"zendesk-priority\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\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-                                    },\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\": \".servicebus.windows.net\",\n-                                \"description\": \"Provides the domain for connecting to Azure Event Hubs\",\n-                                \"displayName\": \"Service Bus Endpoint\",\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\": \"Service Bus Endpoint\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy\": {\n+                            \"zendesk-subject\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"The name of the shared access policy. This policy must have Send claims\",\n-                                \"displayName\": \"Shared Access Policy\",\n+                                \"description\": \"The content or the path to the subject in the incoming record.\",\n+                                \"displayName\": \"Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Shared Access Policy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Shared Access Policy Key\": {\n+                            \"zendesk-type\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"Authentication Strategy\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"The primary or secondary key of the shared access policy\",\n-                                \"displayName\": \"Shared Access Policy Key\",\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\": \"Shared Access Policy Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-type\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n+                            \"zendesk-user\": {\n+                                \"description\": \"Login user to Zendesk subdomain.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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+                                \"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+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"zendesk, ticket\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-language-translation-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-language-translation-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"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+                        \"multiProcessorUseCases\": [],\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Character Set\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Input Language\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Target Language\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Translate Content\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"Transport Type\",\n+                                \"name\": \"Translate Content\",\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+                            \"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\": \"record-sink-record-writer\",\n+                                \"name\": \"Yandex API Key\",\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\": \"2.0.0-M3\"\n-                                }\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\": \"2.0.0-M3\"\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\": \"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-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"language\",\n+                            \"translate\",\n+                            \"translation\",\n+                            \"yandex\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.eventhub.AzureEventHubRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to Azure Event Hubs\",\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hashicorp-vault-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"name\": \"A Spring Vault configuration property name\",\n+                                \"value\": \"The property value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"configuration-strategy\": {\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+                                        \"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\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n-                                        \"displayName\": \"Service Principal\",\n-                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n+                                        \"displayName\": \"Properties Files\",\n+                                        \"value\": \"properties-files\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\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\": \"credentials-type\",\n+                                \"name\": \"configuration-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n+                            \"vault.authentication\": {\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+                                    },\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\": \"TOKEN\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n+                                            \"direct-properties\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"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+                                \"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\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"vault.authentication\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"vault.connection.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\n+                            \"vault.properties.files\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"properties-files\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n-                                \"displayName\": \"Service Principal Client ID\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-id\",\n+                                \"name\": \"vault.properties.files\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\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.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\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\": \"service-principal-client-secret\",\n+                                \"name\": \"vault.read.timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n+                            \"vault.ssl.context.service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"direct-properties\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\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\": \"service-principal-tenant-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\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.SSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"storage-account-key\": {\n+                            \"vault.uri\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n+                                            \"direct-properties\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\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, Managed Identity or Service Principal 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\": \"Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": true,\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\": \"Environment variables 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+                                \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-endpoint-suffix\",\n+                                \"name\": \"vault.uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\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 (the leading '?' may be included) 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"client\",\n+                            \"hashicorp\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsControllerService\",\n-                        \"typeDescription\": \"Defines credentials for ADLS processors.\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n+                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n                         \"version\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"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+                        \"multiProcessorUseCases\": [],\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+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register ADLSCredentialsService\",\n-                                \"value\": \"The ADLSCredentialsService\"\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"websocket-client-controller-service\",\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\": \"2.0.0-M3\"\n+                                }\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"websocket-client-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n-                                \"version\": \"2.0.0-M3\"\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+                            },\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-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"server-url-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\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\": \"storage-credentials-service\",\n+                                \"name\": \"websocket-server-controller-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n                                     \"version\": \"2.0.0-M3\"\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.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M3\"\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                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"file\",\n-                            \"microsoft\",\n-                            \"resource\",\n-                            \"storage\"\n+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureBlobStorageFileResourceService\",\n-                        \"typeDescription\": \"Provides an Azure Blob Storage file resource for other components.\",\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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 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-azure-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\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\": \"adls-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-controller-service-id\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"directory-name\": {\n-                                \"defaultValue\": \"${azure.directory}\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"websocket-endpoint-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"websocket-message-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System (also called Container). It is assumed to be already existing.\",\n-                                \"displayName\": \"Filesystem Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"websocket-session-id\",\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.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"file\",\n-                            \"microsoft\",\n-                            \"resource\",\n-                            \"storage\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.azure.storage.AzureDataLakeStorageFileResourceService\",\n-                        \"typeDescription\": \"Provides an Azure Data Lake Storage (ADLS) file resource for other components.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                        \"systemResourceConsiderations\": [\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\": \"2.0.0-M3\"\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\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"WebSocket\",\n+                            \"publish\",\n+                            \"send\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-lookup-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                            \"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+                                        \"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\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\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\": \"credentials-type\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-id\": {\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\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n-                                \"displayName\": \"Service Principal Client ID\",\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-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\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-                                            \"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.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\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\": \"service-principal-client-secret\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\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-                                            \"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.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\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\": \"service-principal-tenant-id\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"storage-account-key\": {\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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, Managed Identity or Service Principal instead for fine-grained control with policies.\",\n-                                \"displayName\": \"Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-name\": {\n-                                \"description\": \"The storage account name.\",\n-                                \"displayName\": \"Storage Account Name\",\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\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\n                                 \"required\": true,\n-                                \"sensitive\": true\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+                            \"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\": \"storage-endpoint-suffix\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"csv-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n+                            \"ignore-duplicates\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\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\": \"Shared Access Signature token (the leading '?' may be included)\",\n-                                \"displayName\": \"SAS Token\",\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\": \"storage-sas-token\",\n+                                \"name\": \"ignore-duplicates\",\n                                 \"required\": true,\n-                                \"sensitive\": 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-key-column\",\n+                                \"required\": 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_v12\",\n+                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"record\",\n+                            \"reloadable\",\n+                            \"value\"\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+                        \"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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                            \"character-encoding\": {\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\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\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\": \"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\": \"IGNORE\",\n-                                \"description\": \"Choose whether to ignore or upsert when conflict error occurs during insertion\",\n-                                \"displayName\": \"Cosmos DB Conflict Handling 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\": \"azure-cosmos-db-conflict-handling-strategy\",\n-                                \"required\": false,\n+                                \"name\": \"character-encoding\",\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+                            \"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\": \"azure-cosmos-db-connection-service\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"map\",\n+                            \"value\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"proxy-configuration-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.cosmos.AzureCosmosDBConnectionService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"rest-lookup-authentication-strategy\": {\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+                                        \"description\": \"No Authentication\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                        \"description\": \"Basic Authentication\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"description\": \"OAuth2 Authentication\",\n+                                        \"displayName\": \"OAuth2\",\n+                                        \"value\": \"OAUTH2\"\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+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Authentication strategy to use with REST service.\",\n+                                \"displayName\": \"Authentication Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"name\": \"rest-lookup-authentication-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"rest-lookup-basic-auth-password\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                    }\n+                                ],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"rest-lookup-basic-auth-username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                    }\n+                                ],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"rest-lookup-basic-auth-username\",\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+                            \"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\": \"azure-cosmos-db-container-id\",\n+                                \"name\": \"rest-lookup-connection-timeout\",\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+                            \"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+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                    }\n+                                ],\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\": \"azure-cosmos-db-key\",\n+                                \"name\": \"rest-lookup-digest-auth\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"rest-lookup-oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"OAUTH2\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n+                                \"displayName\": \"OAuth2 Access Token Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-name\",\n+                                \"name\": \"rest-lookup-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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"azure-cosmos-db-partition-key\",\n+                                \"name\": \"rest-lookup-read-timeout\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"azure-cosmos-db-uri\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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\": \"2.0.0-M3\"\n+                                }\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+                            \"rest-lookup-response-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Successful and unsuccessful HTTP responses are returned.\",\n+                                        \"displayName\": \"Returned\",\n+                                        \"value\": \"RETURNED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Successful HTTP responses are returned and unsuccessful HTTP responses generate an exception.\",\n+                                        \"displayName\": \"Evaluated\",\n+                                        \"value\": \"EVALUATED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"RETURNED\",\n+                                \"description\": \"Whether to return all responses or throw errors for unsuccessful HTTP status codes.\",\n+                                \"displayName\": \"Response Handling Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert-batch-size\",\n-                                \"required\": false,\n+                                \"name\": \"rest-lookup-response-handling-strategy\",\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+                            \"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\": \"record-reader\",\n-                                \"required\": true,\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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"rest-lookup-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to Cosmos DB 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.RecordLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             },\n                             {\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-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\"\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.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-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n+                        \"typeDescription\": \"Use a REST service to look up values.\",\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Data Format\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec\",\n-                                        \"displayName\": \"avro\",\n-                                        \"value\": \"avro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec.\",\n-                                        \"displayName\": \"apacheavro\",\n-                                        \"value\": \"apacheavro\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with comma-separated values (,). For more information, see RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files.\",\n-                                        \"displayName\": \"csv\",\n-                                        \"value\": \"csv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file containing JSON objects separated by \\\\n or \\\\r\\\\n. For more information, see JSON Lines (JSONL).\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file containing a JSON array of property containers (each representing a record) or any number of property containers separated by spaces, \\\\n or \\\\r\\\\n. Each property container may be spread across multiple lines. This format is preferable to JSON unless the data is not property containers.\",\n-                                        \"displayName\": \"multijson\",\n-                                        \"value\": \"multijson\"\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\": \"An ORC file.\",\n-                                        \"displayName\": \"orc\",\n-                                        \"value\": \"orc\"\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\": \"A parquet file.\",\n-                                        \"displayName\": \"parquet\",\n-                                        \"value\": \"parquet\"\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n                                     },\n                                     {\n-                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n-                                        \"displayName\": \"psv\",\n-                                        \"value\": \"psv\"\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n                                     },\n                                     {\n-                                        \"description\": \"A text file with values separated by semicolons (;).\",\n-                                        \"displayName\": \"scsv\",\n-                                        \"value\": \"scsv\"\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n                                     },\n                                     {\n-                                        \"description\": \"A text file with SOH-separated values. (SOH is the ASCII code point 1. This format is used by Hive in HDInsight).\",\n-                                        \"displayName\": \"sohsv\",\n-                                        \"value\": \"sohsv\"\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\": \"A text file with tab delimited values (\\\\t).\",\n-                                        \"displayName\": \"tsv\",\n-                                        \"value\": \"tsv\"\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\": \"A text file with tab-delimited values (\\\\t). A backslash (\\\\) is used as escape character.\",\n-                                        \"displayName\": \"tsve\",\n-                                        \"value\": \"tsve\"\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n                                     },\n                                     {\n-                                        \"description\": \"A text file with lines separated by \\\\n. Empty lines are skipped\",\n-                                        \"displayName\": \"txt\",\n-                                        \"value\": \"txt\"\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n                                     }\n                                 ],\n-                                \"description\": \"The format of the data that is sent to Azure Data Explorer. Supported formats include: avro, csv, json\",\n-                                \"displayName\": \"Data Format\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Data Format\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Name\": {\n-                                \"description\": \"Azure Data Explorer Database Name for ingesting data\",\n-                                \"displayName\": \"Database Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Database Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingest Mapping Name\": {\n-                                \"description\": \"The name of the mapping responsible for storing the data in the appropriate columns.\",\n-                                \"displayName\": \"Ingest Mapping Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Ingest Mapping Name\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingest Status Polling Interval\": {\n-                                \"defaultValue\": \"5 s\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n-                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the value of interval of time to poll for ingestion status\",\n-                                \"displayName\": \"Ingest Status Polling Interval\",\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\": \"Ingest Status Polling Interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingest Status Polling Timeout\": {\n-                                \"defaultValue\": \"5 m\",\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n-                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the total amount time to poll for ingestion status\",\n-                                \"displayName\": \"Ingest Status Polling Timeout\",\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\": \"Ingest Status Polling Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingestion Ignore First Record\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Defines whether ignore first record while ingestion.\",\n-                                \"displayName\": \"Ingestion Ignore First Record\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ingestion Ignore First Record\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kusto Ingest Service\": {\n-                                \"description\": \"Azure Data Explorer Kusto Ingest Service\",\n-                                \"displayName\": \"Kusto Ingest Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kusto Ingest 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.data.explorer.KustoIngestService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Partially Succeeded Routing Strategy\": {\n-                                \"allowableValues\": [\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\": \"\",\n-                                        \"displayName\": \"success\",\n-                                        \"value\": \"success\"\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\": \"\",\n-                                        \"displayName\": \"failure\",\n-                                        \"value\": \"failure\"\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\": \"failure\",\n-                                \"description\": \"Defines where to route FlowFiles that resulted in a partially succeeded status.\",\n-                                \"displayName\": \"Partially Succeeded Routing 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\": \"Partially Succeeded Routing Strategy\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Poll for Ingest Status\": {\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\": \"false\",\n-                                \"description\": \"Determines whether to poll on ingestion status after an ingestion to Azure Data Explorer is completed\",\n-                                \"displayName\": \"Poll for Ingest Status\",\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\": \"Poll for Ingest Status\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Streaming Enabled\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"csv-file\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\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\": \"false\",\n-                                \"description\": \"Whether to stream data to Azure Data Explorer.\",\n-                                \"displayName\": \"Streaming Enabled\",\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\": \"Streaming Enabled\",\n+                                \"name\": \"ignore-duplicates\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"Azure Data Explorer Table Name for ingesting data\",\n-                                \"displayName\": \"Table Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"lookup-value-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Ingest processing succeeded\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             },\n                             {\n-                                \"description\": \"Ingest processing failed\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\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.azure.data.explorer.PutAzureDataExplorer\",\n-                        \"typeDescription\": \"Acts as an Azure Data Explorer sink which sends FlowFiles to the provided endpoint. Data can be sent through queued ingestion or streaming ingestion to the Azure Data Explorer cluster.\",\n-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Database Name\": {\n-                                \"description\": \"Azure Data Explorer Database Name for querying\",\n-                                \"displayName\": \"Database Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Database Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kusto Query Service\": {\n-                                \"description\": \"Azure Data Explorer Kusto Query Service\",\n-                                \"displayName\": \"Kusto Query Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kusto Query 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.data.explorer.KustoQueryService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Query\": {\n-                                \"description\": \"Query to be run against Azure Data Explorer\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                        \"dynamicProperties\": [\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\": \"ENVIRONMENT\",\n+                                \"name\": \"A key that can be looked up\",\n+                                \"value\": \"The value for the key\"\n                             }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles containing results of a successful Query\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles containing original input associated with a failed Query\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.QueryAzureDataExplorer\",\n-                        \"typeDescription\": \"Query Azure Data Explorer and stream JSON results to output FlowFiles\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Azure Data Explorer query error message on failures\",\n-                                \"name\": \"query.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Azure Data Explorer query executed\",\n-                                \"name\": \"query.executed\"\n-                            },\n-                            {\n-                                \"description\": \"Content Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"configuration-file\": {\n+                                \"description\": \"A configuration file\",\n+                                \"displayName\": \"Configuration File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Service Bus Endpoint\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": false,\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-                                    {\n-                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Component State\",\n-                                        \"value\": \"COMPONENT_STATE\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"checkpoint-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-consumer-group\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-initial-offset\": {\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\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\": \"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\": \"event-hub-initial-offset\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"event-hub-name\": {\n-                                \"description\": \"The name of the event hub to pull messages from.\",\n-                                \"displayName\": \"Event Hub Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-name\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-namespace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-prefetch-count\": {\n-                                \"defaultValue\": \"300\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Prefetch Count\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-prefetch-count\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-value-columns\",\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.RecordLookupService\",\n+                                \"version\": \"2.0.0-M3\"\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+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-shared-access-policy-name\",\n+                                \"name\": \"Cache Expiration\",\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+                            \"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\": \"event-hub-shared-access-policy-primary-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbrecord-lookup-cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport 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 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\": \"2.0.0-M3\"\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+                                \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"record-writer\",\n-                                \"required\": false,\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"storage-account-key\": {\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 account key to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-account-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"storage-account-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 account to store event hub consumer group state.\",\n-                                \"displayName\": \"Storage Account Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-account-name\",\n+                                \"name\": \"dbrecord-lookup-key-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-container-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbrecord-lookup-table-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\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\": \"use-managed-identity\",\n+                                \"name\": \"lookup-value-column\",\n                                 \"required\": true,\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles received from Event Hub.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"cache\",\n+                            \"database\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"rdbms\",\n+                            \"reloadable\",\n+                            \"value\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Consumer Group\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Message Enqueue Time\",\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+                            \"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\": \"Event Hub Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"database-file\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\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+                            \"lookup-anonymous-ip\": {\n+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"name\": \"lookup-anonymous-ip\",\n                                 \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Partition Recivier Fetch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Service Bus Endpoint\": {\n+                            \"lookup-city\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"Service Bus Endpoint\",\n+                                \"name\": \"lookup-city\",\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-                                \"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+                            \"lookup-connection-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"lookup-connection-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                            \"lookup-domain\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport 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 Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"lookup-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"lookup-isp\": {\n                                 \"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+                                \"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\": \"use-managed-identity\",\n+                                \"name\": \"lookup-isp\",\n                                 \"required\": true,\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.lookup.RecordLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"anonymous\",\n+                            \"cellular\",\n+                            \"domain\",\n+                            \"enrich\",\n+                            \"geo\",\n+                            \"ip\",\n+                            \"ipgeo\",\n+                            \"isp\",\n+                            \"lookup\",\n+                            \"maxmind\",\n+                            \"tor\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                    },\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-poi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Event Hub Name\": {\n-                                \"description\": \"Name of Azure Event Hubs destination\",\n-                                \"displayName\": \"Event Hub 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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Name\",\n-                                \"required\": true,\n+                                \"name\": \"Date 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+                            \"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\": \"Event Hub Namespace\",\n+                                \"name\": \"Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"Protection Type\": {\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+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\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\": \"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\": \"Service Bus Endpoint\",\n+                                \"name\": \"Protection Type\",\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+                            \"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\": \"Environment variables 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\": \"Environment variables 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\": \"Shared Access Policy Name\",\n+                                \"name\": \"Time Format\",\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+                            \"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\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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 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\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport 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\": \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n+                            \"schema-reference-reader\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n+                                            \"schema-reference-reader\"\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\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"use-managed-identity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\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 Controller Service to use for the Schema Registry\",\n+                                \"displayName\": \"Schema Registry\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-managed-identity\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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+                            \"cell\",\n+                            \"excel\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"spreadsheet\",\n+                            \"values\",\n+                            \"xlsx\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jolt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jolt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -3611,243 +4103,232 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Source Blob Name\": {\n-                                \"description\": \"The full name of the source blob\",\n-                                \"displayName\": \"Source Blob Name\",\n+                            \"Custom Module Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Source Blob Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Custom Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Source Container Name\": {\n-                                \"description\": \"Name of the Azure storage container that will be copied\",\n-                                \"displayName\": \"Source Container Name\",\n+                            \"Custom Transformation Class Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Source Container Name\",\n-                                \"required\": true,\n+                                \"name\": \"Custom Transformation Class Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Source Storage Credentials\": {\n-                                \"description\": \"Credentials Service used to obtain Azure Blob Storage Credentials to read Source Blob information\",\n-                                \"displayName\": \"Source Storage Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Source Storage Credentials\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the destination blob defaults to the Source Blob Name when not specified\",\n-                                \"displayName\": \"Destination Blob Name\",\n+                            \"Jolt Specification\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"name\": \"Jolt Specification\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Jolt Transform\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\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\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\n+                                        \"description\": \"Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\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\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\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+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\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\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transform\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Jolt Transform\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container destination defaults to the Source Container Name when not specified\",\n-                                \"displayName\": \"Destination Container Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\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\": \"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\": \"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\": \"create-container\",\n+                                \"name\": \"Pretty Print\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Destination Storage Credentials\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"Transform Cache Size\",\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\": \"2.0.0-M3\"\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.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\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.azure.storage.CopyAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Copies a blob in Azure Blob Storage from one account/container to another. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.jolt.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Always set to application/json\",\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-                            },\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\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-jolt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -3860,4588 +4341,8994 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"Custom Module Directory\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Custom Module Directory\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Custom Transformation Class Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"jolt-transform-custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Jolt Transform\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"name\": \"Custom Transformation Class Name\",\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+                            \"Jolt Specification\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"name\": \"Jolt Specification\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Jolt Transform\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n+                                        \"displayName\": \"Shift\",\n+                                        \"value\": \"jolt-transform-shift\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE\"\n+                                        \"description\": \"Execute list of Jolt transformations.\",\n+                                        \"displayName\": \"Chain\",\n+                                        \"value\": \"jolt-transform-chain\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"ONLY\"\n+                                        \"description\": \"Apply default values to the output JSON.\",\n+                                        \"displayName\": \"Default\",\n+                                        \"value\": \"jolt-transform-default\"\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\": \"Change the cardinality of input elements to create the output JSON.\",\n+                                        \"displayName\": \"Cardinality\",\n+                                        \"value\": \"jolt-transform-card\"\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+                                        \"description\": \"Writes when key is missing or value is null\",\n+                                        \"displayName\": \"Modify - Default\",\n+                                        \"value\": \"jolt-transform-modify-default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Always overwrite value\",\n+                                        \"displayName\": \"Modify - Overwrite\",\n+                                        \"value\": \"jolt-transform-modify-overwrite\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Writes when key is missing\",\n+                                        \"displayName\": \"Modify - Define\",\n+                                        \"value\": \"jolt-transform-modify-define\"\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\": \"jolt-transform-chain\",\n+                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n+                                \"displayName\": \"Jolt Transform\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-snapshots-option\",\n+                                \"name\": \"Jolt Transform\",\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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Transform Cache Size\",\n+                                \"required\": true,\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"jolt-record-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_v12\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\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-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\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 FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"cardinality\",\n+                            \"chainr\",\n+                            \"defaultr\",\n+                            \"jolt\",\n+                            \"record\",\n+                            \"removr\",\n+                            \"shiftr\",\n+                            \"sort\",\n+                            \"transform\"\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+                        \"type\": \"org.apache.nifi.processors.jolt.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-key-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-key-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"key\": {\n+                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n+                                \"displayName\": \"Key\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\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+                            \"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\": \"filesystem-object-type\",\n-                                \"required\": true,\n+                                \"name\": \"key-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"proxy-configuration-service\",\n+                                \"name\": \"key-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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\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+                        \"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.key.service.api.PrivateKeyService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"PEM\",\n+                            \"PKCS8\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Container Name\\\" property should be set to the name of the Blob Storage Container that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_CONTAINER}`.\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureBlobStorage_v12.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Container Name\\\" = \\\"${azure.container}\\\"\\n\\\"Blob Name\\\" = \\\"${azure.blobname}\\\"\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in an Azure Blob Storage container\",\n-                                \"keywords\": [\n-                                    \"azure\",\n-                                    \"blob\",\n-                                    \"storage\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\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\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"NONE\",\n-                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key Type\",\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\": \"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-branch\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"schema-name\"\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-                                \"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-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\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\": \"Environment variables 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-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\": \"Environment variables 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-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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-                                \"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\": \"2.0.0-M3\"\n-                                }\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"comma\",\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Filesystem Name\\\" property should be set to the name of the Azure Filesystem (also known as a Container) that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_FILESYSTEM}`.\\nConfigure the \\\"Directory Name\\\" property to specify the name of the directory in the file system.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_DIRECTORY}`.\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureDataLakeStorage.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n-                                    },\n+                        \"propertyDescriptors\": {\n+                            \"Schema Reference Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"configuration\": \"\\\"Filesystem Name\\\" = \\\"${azure.filesystem}\\\"\\n\\\"Directory Name\\\" = \\\"${azure.directory}\\\"\\n\\\"File Name\\\" = \\\"${azure.filename}\\\"\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-writer\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in an Azure DataLake Storage directory\",\n-                                \"keywords\": [\n-                                    \"azure\",\n-                                    \"datalake\",\n-                                    \"adls\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n+                                \"displayName\": \"Schema Reference Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"Schema Reference 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.ADLSCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Schema Write Strategy\": {\n+                                \"allowableValues\": [\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+                                    },\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n+                                        \"displayName\": \"Schema Reference Writer\",\n+                                        \"value\": \"schema-reference-writer\"\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File 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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\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+                            \"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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"encoder-pool-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+                                \"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+                                    {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\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+                            \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"number-of-retries\",\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-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables 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 object. An empty value or a value of zero will start reading at the beginning of the object.\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\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 specified file from Azure Data Lake Storage\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            {\n-                                \"description\": \"The Azure Data Lake Storage error message from the failed operation\",\n-                                \"name\": \"azure.datalake.storage.errorMessage\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"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+                            \"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\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"accept-empty-extensions\",\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+                            \"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\": \"Minimum File Age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"datetime-representation\",\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+                            \"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\": \"Minimum File Size\",\n+                                \"name\": \"inference-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"blob-name-prefix\": {\n-                                \"description\": \"Search prefix for listing\",\n-                                \"displayName\": \"Blob Name Prefix\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"blob-name-prefix\",\n+                                \"name\": \"invalid-message-field\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"container-name\",\n-                                \"required\": true,\n+                                \"name\": \"raw-message-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"schema-access-strategy\": {\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 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\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"all\",\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                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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+                                \"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\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n+                            \"schema-inference-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"infer-schema\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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+                                \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSchemaCacheService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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+                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n+                                \"displayName\": \"Schema Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\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\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"schema-reference-reader\",\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+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n                                     \"version\": \"2.0.0-M3\"\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-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"cef\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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+                                \"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\": \"Maximum File Age\",\n-                                \"required\": false,\n+                                \"name\": \"CSV Format\",\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+                            \"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\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Comment Marker\",\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+                            \"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\": \"Minimum File Age\",\n-                                \"required\": true,\n+                                \"name\": \"Date 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+                            \"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\": \"Minimum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Null String\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\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\": \"Record Separator\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Skip Header Line\": {\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\": \"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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Skip Header Line\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"file-filter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-temporary-files\": {\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\": \"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+                                \"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\": \"include-temporary-files\",\n+                                \"name\": \"Trim Fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Trim double quote\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"rfc-4180\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"listing-strategy\",\n+                                \"name\": \"Trim double quote\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"path-filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value Separator\",\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\": \"2.0.0-M3\"\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+                            \"csv-reader-csv-parser\": {\n+                                \"allowableValues\": [\n+                                    {\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\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n+                                        \"displayName\": \"Jackson CSV\",\n+                                        \"value\": \"jackson-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The CSV parser implementation from the FastCSV library. NOTE: This parser only officially supports RFC-4180, so it recommended to set the 'CSV Format' property to 'RFC 4180'. It does handle some non-compliant CSV data, for that case set the 'CSV Format' property to 'CUSTOM' and the other custom format properties (such as 'Trim Fields', 'Trim double quote', etc.) as appropriate. Be aware that this may cause errors if FastCSV doesn't handle the property settings correctly (such as 'Ignore Header'), but otherwise may process the input as expected even if the data is not fully RFC-4180 compliant.\",\n+                                        \"displayName\": \"FastCSV\",\n+                                        \"value\": \"fast-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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"csv-reader-csv-parser\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"recurse-subdirectories\": {\n+                            \"csvutils-allow-duplicate-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\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"dependencies\": [\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.\\nHandling 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* FastCSV - duplicate headers will be de-duplicated with the field value being that of the left-most duplicate CSV column\",\n+                                \"displayName\": \"Allow Duplicate Header Names\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recurse-subdirectories\",\n-                                \"required\": true,\n+                                \"name\": \"csvutils-allow-duplicate-header-names\",\n+                                \"required\": false,\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-                            \"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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\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\": \"adls-credentials-service\",\n+                                \"name\": \"csvutils-character-set\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"ignore-csv-header\": {\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+                                        \"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+                                    {\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\": \"ignore\",\n-                                        \"value\": \"ignore\"\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"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\": \"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\": \"conflict-resolution-strategy\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source-directory-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"source-filesystem-name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\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.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Client-Side Encryption Key ID\": {\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+                                \"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                                     {\n                                         \"dependentValues\": [\n-                                            \"LOCAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Client-Side Encryption Key ID\",\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+                                    {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Escape Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"Include Header Line\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\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 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\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"Include Header Line\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\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-                                            \"LOCAL\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"Client-Side Encryption Local Key\",\n+                                \"name\": \"Include Trailing Delimiter\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"File Resource Service\": {\n+                            \"Null String\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Null String\",\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+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\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+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"name\": \"Quote Character\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Quote Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"All values will be quoted using the configured quote character.\",\n+                                        \"displayName\": \"Quote All Values\",\n+                                        \"value\": \"ALL\"\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\": \"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\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\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\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution 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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"Quote Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Record Separator\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"custom\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"create-container\",\n+                                \"name\": \"Record Separator\",\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 Reference Writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-writer\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n+                                \"displayName\": \"Schema Reference Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Schema Reference 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.schemaregistry.services.SchemaReferenceWriter\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n+                                        \"displayName\": \"Schema Reference Writer\",\n+                                        \"value\": \"schema-reference-writer\"\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\": \"storage-credentials-service\",\n+                                \"name\": \"Schema Write 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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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-                            {\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-                        \"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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"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+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\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\": \"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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Timestamp Format\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Resource Transfer Source\": {\n+                            \"Trim Fields\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\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\": \"Resource Transfer Source\",\n+                                \"name\": \"Trim Fields\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"base-temporary-path\": {\n-                                \"defaultValue\": \"\",\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"WRITE_AND_RENAME\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Writing Strategy\",\n-                                        \"propertyName\": \"writing-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"base-temporary-path\",\n-                                \"required\": false,\n+                                \"name\": \"Value Separator\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"csv-writer\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"The CSV writer implementation from the Apache Commons CSV library.\",\n+                                        \"displayName\": \"Apache Commons CSV\",\n+                                        \"value\": \"commons-csv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"The CSV writer implementation from the FastCSV library. NOTE: This writer only officially supports RFC-4180, so it recommended to set the 'CSV Format' property to 'RFC 4180'. It does handle some non-compliant CSV data, for that case set the 'CSV Format' property to 'CUSTOM' and the other custom format properties (such as 'Trim Fields', 'Trim double quote', etc.) as appropriate. Be aware that this may cause errors if FastCSV doesn't handle the property settings correctly (such as 'Quote Mode'), but otherwise may process the output as expected even if the data is not fully RFC-4180 compliant.\",\n+                                        \"displayName\": \"FastCSV\",\n+                                        \"value\": \"fast-csv\"\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\": \"commons-csv\",\n+                                \"description\": \"Specifies which writer implementation to use to write CSV records. NOTE: Different writers may support different subsets of functionality and may also exhibit different levels of performance.\",\n+                                \"displayName\": \"CSV Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"csv-writer\",\n                                 \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"csvutils-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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n-                                \"required\": true,\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+                            \"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\": \"2.0.0-M3\"\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+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WRITE_AND_RENAME\",\n-                                \"description\": \"Defines the approach for writing the Azure file.\",\n-                                \"displayName\": \"Writing Strategy\",\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\": \"writing-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\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-                            {\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-                        \"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.PutAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Auto Delete Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\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+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Credentials Service\",\n+                                \"name\": \"schema-reference-reader\",\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_v12\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n                                     \"version\": \"2.0.0-M3\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Request Timeout\",\n-                                \"required\": 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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+                            \"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\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All successfully processed 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.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Credentials Service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n-                                \"displayName\": \"Credentials Service\",\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\": \"Credentials Service\",\n+                                \"name\": \"Grok Expression\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Grok Pattern File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"no-match-behavior\": {\n+                                \"allowableValues\": [\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+                                    },\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+                                    },\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\": \"Message Time To Live\",\n+                                \"name\": \"no-match-behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue Name\": {\n-                                \"description\": \"Name of the Azure Storage Queue\",\n-                                \"displayName\": \"Queue Name\",\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\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+                                    },\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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+                                    {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n-                                \"required\": true,\n+                                \"name\": \"schema-branch\",\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+                            \"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\": \"Request Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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+                            \"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\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\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+                        \"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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\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.storage.queue.PutAzureQueueStorage_v12\",\n-                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance ID\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Job Name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-null-values\": {\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\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\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\": \"include-null-values\",\n+                                \"name\": \"Allow Comments\",\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, UPLOAD, 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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, UPLOAD, 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Date Format\",\n                                 \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n                                 \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"schema-access-strategy\": {\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\": \"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\": \"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\": \"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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"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\": \"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\": \"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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance ID\",\n+                                \"name\": \"schema-access-strategy\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Workspace Key\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Process group ID(s)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\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\": \"Send JVM Metrics\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\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.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonTreeReader\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"metrics\",\n-                            \"reporting\"\n+                            \"json\",\n+                            \"jsonpath\",\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\"\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.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\": \"2.0.0-M3\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hl7-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hl7-input-version\": {\n+                            \"Allow Scientific Notation\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.6\",\n-                                        \"value\": \"2.6\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"autodetect\",\n-                                \"description\": \"The HL7 version to use for parsing and validation\",\n-                                \"displayName\": \"HL7 Input Version\",\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\": \"hl7-input-version\",\n+                                \"name\": \"Allow Scientific Notation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"parse-segment-fields\": {\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                                     {\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 parse HL7 segment fields into attributes\",\n-                                \"displayName\": \"Parse Segment Fields\",\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\": \"parse-segment-fields\",\n+                                \"name\": \"Pretty Print JSON\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"skip-validation\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Schema Reference Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-writer\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to validate HL7 message values\",\n-                                \"displayName\": \"Skip Validation\",\n+                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n+                                \"displayName\": \"Schema Reference Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"skip-validation\",\n+                                \"name\": \"Schema Reference 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.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"use-segment-names\": {\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n+                                        \"displayName\": \"Schema Reference Writer\",\n+                                        \"value\": \"schema-reference-writer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not to use HL7 segment names in attributes\",\n-                                \"displayName\": \"Use Segment Names\",\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\": \"use-segment-names\",\n+                                \"name\": \"Schema Write Strategy\",\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-                            {\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-                        \"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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Encoding\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Format\",\n+                                \"required\": false,\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-path\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timestamp 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.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"name\": \"A Spring Vault configuration property name\",\n-                                \"value\": \"The property value\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-strategy\": {\n+                            },\n+                            \"compression-format\": {\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\": \"none\",\n+                                        \"value\": \"none\"\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\": \"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\": \"direct-properties\",\n-                                \"description\": \"Specifies the source of the configuration properties.\",\n-                                \"displayName\": \"Configuration Strategy\",\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\": \"configuration-strategy\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.authentication\": {\n+                            \"compression-level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TOKEN\",\n-                                        \"value\": \"TOKEN\"\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"APPID\",\n-                                        \"value\": \"APPID\"\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"APPROLE\",\n-                                        \"value\": \"APPROLE\"\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AWS_EC2\",\n-                                        \"value\": \"AWS_EC2\"\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AZURE\",\n-                                        \"value\": \"AZURE\"\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CERT\",\n-                                        \"value\": \"CERT\"\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CUBBYHOLE\",\n-                                        \"value\": \"CUBBYHOLE\"\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KUBERNETES\",\n-                                        \"value\": \"KUBERNETES\"\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\": \"TOKEN\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"gzip\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"compression-format\"\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+                                \"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\": \"vault.authentication\",\n+                                \"name\": \"compression-level\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.connection.timeout\",\n+                                \"name\": \"output-grouping\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.properties.files\": {\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+                                \"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                                     {\n                                         \"dependentValues\": [\n-                                            \"properties-files\"\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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+                                \"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\": \"Environment variables 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\": \"vault.properties.files\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.read.timeout\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"vault.ssl.context.service\": {\n+                            \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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+                                \"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\": \"vault.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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"vault.uri\": {\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"schema-text-property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-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 text of an Avro-formatted Schema\",\n+                                \"displayName\": \"Schema Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"vault.uri\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"hashicorp\",\n-                            \"vault\"\n+                            \"json\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"row\",\n+                            \"serialize\",\n+                            \"writer\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n-                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-avro-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Count Items\": {\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\": \"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+                                \"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\": \"Count Items\",\n+                                \"name\": \"Allow Comments\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fingerprint Algorithm\": {\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\": \"\",\n-                                        \"displayName\": \"CRC-64-AVRO\",\n-                                        \"value\": \"CRC-64-AVRO\"\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\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\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\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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+                                \"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\": \"Fingerprint Algorithm\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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+                                            \"schema-reference-reader\",\n+                                            \"schema-name\",\n+                                            \"schema-text-property\"\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\": \"Metadata Keys\",\n-                                \"required\": false,\n+                                \"name\": \"schema-application-strategy\",\n+                                \"required\": true,\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-                        \"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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n-                                \"name\": \"schema.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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n-                                \"name\": \"schema.fingerprint\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Size\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Output Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Avro's object container file format\",\n-                                        \"displayName\": \"Datafile\",\n-                                        \"value\": \"Datafile\"\n-                                    },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Bare Avro records\",\n-                                        \"displayName\": \"Bare Record\",\n-                                        \"value\": \"Bare Record\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\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+                                \"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\": \"Output Strategy\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Split Strategy\": {\n-                                \"allowableValues\": [\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Split at Record boundaries\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n+                                        \"dependentValues\": [\n+                                            \"schema-name\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\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+                                \"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\": \"Environment variables 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\": \"Split Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"starting-field-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Metadata\": {\n+                            \"starting-field-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Begins processing from the root node.\",\n+                                        \"displayName\": \"Root Node\",\n+                                        \"value\": \"ROOT_NODE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"Transfer Metadata\",\n+                                \"name\": \"starting-field-strategy\",\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-                            {\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+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All new files split from 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.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.json.JsonPathReader\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"dynamicProperties\": [\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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\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\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.lookup.RecordSetWriterLookup\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"split\"\n+                            \"lookup\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Service to Use\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\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\": \"2.0.0-M3\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"max-cache-size\",\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\": \"2.0.0-M3\"\n-                            },\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.serialization.RecordSchemaCacheService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n-                            \"hazelcast\",\n-                            \"map\"\n+                            \"record\",\n+                            \"schema\"\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.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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-cluster-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hazelcast-clustering-strategy\": {\n+                            \"syslog-5424-reader-raw-message\": {\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\": \"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\": \"hazelcast-clustering-strategy\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-port\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\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.serialization.RecordReaderFactory\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"syslog 5424\",\n+                            \"text\"\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.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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"hazelcast-connection-timeout\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hazelcast-retry-backoff-initial\",\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+                            \"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\": \"hazelcast-retry-backoff-maximum\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hazelcast-server-address\",\n+                                \"name\": \"syslog-5424-reader-raw-message\",\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.serialization.RecordReaderFactory\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n+                            \"logfiles\",\n+                            \"logs\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"syslog\",\n+                            \"text\"\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.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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-dropbox-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"refresh-token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Text\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"dropbox\",\n-                            \"provider\"\n+                            \"el\",\n+                            \"expression\",\n+                            \"freeform\",\n+                            \"language\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"resultset\",\n+                            \"serialize\",\n+                            \"text\",\n+                            \"writer\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n-                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-splunk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application\": {\n-                                \"description\": \"The Splunk Application to query.\",\n-                                \"displayName\": \"Application\",\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\": \"Application\",\n+                                \"name\": \"Date Format\",\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+                            \"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\": \"Connection Timeout\",\n+                                \"name\": \"Time Format\",\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+                            \"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\": \"Earliest Time\",\n+                                \"name\": \"Timestamp Format\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\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\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"attribute_prefix\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Latest Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"content_field_name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Mode\": {\n+                            \"parse_xml_attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ATOM\",\n-                                        \"value\": \"ATOM\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CSV\",\n-                                        \"value\": \"CSV\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parse_xml_attributes\",\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\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\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\": \"\",\n-                                        \"displayName\": \"JSON_COLS\",\n-                                        \"value\": \"JSON_COLS\"\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"record_format\",\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 Schema Registry service.\",\n+                                        \"displayName\": \"Use 'Schema Name' Property\",\n+                                        \"value\": \"schema-name\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JSON_ROWS\",\n-                                        \"value\": \"JSON_ROWS\"\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\": \"RAW\",\n-                                        \"value\": \"RAW\"\n+                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\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\": \"JSON\",\n-                                \"description\": \"The output mode for the results.\",\n-                                \"displayName\": \"Output Mode\",\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\": \"Output Mode\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\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\": \"Owner\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n+                                \"name\": \"schema-inference-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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8089\",\n-                                \"description\": \"The port of the Splunk server.\",\n-                                \"displayName\": \"Port\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables 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\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"parser\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"xml\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"Query\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"Read Timeout\",\n+                                \"name\": \"Date Format\",\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+                            \"Schema Reference Writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-writer\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n+                                        \"propertyName\": \"Schema Write Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n+                                \"displayName\": \"Schema Reference Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"Schema Reference 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.schemaregistry.services.SchemaReferenceWriter\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Scheme\": {\n+                            \"Schema Write Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\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\": \"http\",\n-                                        \"value\": \"http\"\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n+                                        \"displayName\": \"Schema Reference Writer\",\n+                                        \"value\": \"schema-reference-writer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\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\": \"Scheme\",\n+                                \"name\": \"Schema Write Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\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+                            \"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+                            \"array_wrapping\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\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\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"array_wrapping\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"omit_xml_declaration\": {\n+                                \"allowableValues\": [\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+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"Security Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"omit_xml_declaration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Field Strategy\": {\n+                            \"pretty_print_xml\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n-                                        \"displayName\": \"Index Time\",\n-                                        \"value\": \"Index Time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n+                                \"displayName\": \"Pretty Print XML\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Field Strategy\",\n+                                \"name\": \"pretty_print_xml\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Range Strategy\": {\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+                            \"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\": \"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+                                        \"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 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+                                        \"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 the time range provided through the Earliest Time and Latest Time properties will be used.\",\n-                                        \"displayName\": \"Provided\",\n-                                        \"value\": \"Provided\"\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\": \"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\": \"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\": \"Time Range Strategy\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Zone\": {\n-                                \"allowableValues\": [\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Abidjan\",\n-                                        \"value\": \"Africa/Abidjan\"\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\": \"Environment variables 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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-name\": {\n+                                \"defaultValue\": \"${schema.name}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Accra\",\n-                                        \"value\": \"Africa/Accra\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Addis_Ababa\",\n-                                        \"value\": \"Africa/Addis_Ababa\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Algiers\",\n-                                        \"value\": \"Africa/Algiers\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-text\": {\n+                                \"defaultValue\": \"${avro.schema}\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmara\",\n-                                        \"value\": \"Africa/Asmara\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-version\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Asmera\",\n-                                        \"value\": \"Africa/Asmera\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"suppress_nulls\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Bamako\",\n-                                        \"value\": \"Africa/Bamako\"\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\": \"\",\n-                                        \"displayName\": \"Africa/Bangui\",\n-                                        \"value\": \"Africa/Bangui\"\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\": \"Africa/Banjul\",\n-                                        \"value\": \"Africa/Banjul\"\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+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M3\"\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+                        ],\n+                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n+                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                                \"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\": \"\",\n-                                        \"displayName\": \"Africa/Bissau\",\n-                                        \"value\": \"Africa/Bissau\"\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\": \"\",\n-                                        \"displayName\": \"Africa/Blantyre\",\n-                                        \"value\": \"Africa/Blantyre\"\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\": \"Africa/Brazzaville\",\n-                                        \"value\": \"Africa/Brazzaville\"\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\": \"Africa/Bujumbura\",\n-                                        \"value\": \"Africa/Bujumbura\"\n-                                    },\n+                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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-application-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Cairo\",\n-                                        \"value\": \"Africa/Cairo\"\n+                                        \"description\": \"Applies the schema for the whole JSON.\",\n+                                        \"displayName\": \"Whole JSON\",\n+                                        \"value\": \"WHOLE_JSON\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Casablanca\",\n-                                        \"value\": \"Africa/Casablanca\"\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-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ceuta\",\n-                                        \"value\": \"Africa/Ceuta\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\",\n+                                            \"schema-text-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Conakry\",\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+                            \"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\": \"Environment variables 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+                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-shopify-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-shopify-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CUSTOMERS\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DISCOUNTS\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"INVENTORY\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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+                                    },\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\": \"ORDERS\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"PRODUCT\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SALES_CHANNELS\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"STORE_PROPERTIES\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-delay\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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 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\": \"is-incremental\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"object-category\": {\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+                                    },\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+                                \"description\": \"Shopify object category\",\n+                                \"displayName\": \"Object Category\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"result-limit\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\n+                                }\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+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"shopify\"\n+                        ],\n+                        \"triggerSerially\": true,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\n+                        },\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\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\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-comment-body\",\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\": \"Environment variables 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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-scripting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"lookup\",\n+                            \"record\",\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.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.lookup.StringLookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"lookup\",\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.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"recordFactory\",\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.serialization.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"record sink\",\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.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+                                \"name\": \"success\"\n+                            },\n+                            {\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+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"clojure\",\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"script\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                        ],\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+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"script\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"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\": \"2.0.0-M3\"\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+                                \"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\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.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+                            {\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"record\",\n+                            \"script\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"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\": \"2.0.0-M3\"\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+                                \"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\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\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 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+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"record\",\n+                            \"script\",\n+                            \"segment\",\n+                            \"split\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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+                                \"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+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"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\": \"2.0.0-M3\"\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+                                \"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\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.jolt.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+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Each FlowFile that were successfully transformed will be routed to this Relationship\",\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"script\",\n+                            \"transform\",\n+                            \"update\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"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\": \"2.0.0-M3\"\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+                                \"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\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\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\": \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.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+                            },\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+                            },\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"groovy\",\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Groovy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"reporting\",\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\": \"2.0.0-M3\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-framework-kubernetes-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-email-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\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\": \"Mark Messages as Read\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use SSL\": {\n+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use SSL\",\n+                                \"required\": true,\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+                            },\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"host\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"host\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                        \"supportsSensitiveDynamicProperties\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that could not be parsed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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.ExtractEmailAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.attachment.parent.filename \"\n+                            },\n+                            {\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.attachment.parent.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"The mime type of the attachment.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CAPTURED_HEADERS\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"STRICT_ADDRESS_PARSING\": {\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+                                        \"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+                                        \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"STRICT_ADDRESS_PARSING\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Extraction was successful\",\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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.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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n+                            },\n+                            {\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.tnef.attachment.parent.filename \"\n+                            },\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    }\n+                                ],\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\": \"CLIENT_AUTH\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SMTP_HOSTNAME\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SMTP_PORT\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SMTP_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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All new messages will be routed as FlowFiles 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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"email\",\n+                            \"listen\",\n+                            \"smtp\"\n+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-splunk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Earliest Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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\": \"Hostname\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Latest Time\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Read Timeout\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n+                                    }\n+                                ],\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\": \"Scheme\",\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+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\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+                                    }\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Time Range Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Time Zone\": {\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@@ -12262,423 +17149,307 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-github-nar\",\n+            \"artifact\": \"nifi-py4j-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-box-nar\",\n+            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n-                \"processors\": [\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-confluent-platform-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"box-client-service\",\n-                                \"required\": true,\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\": \"2.0.0-M3\"\n-                                }\n-                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"A FlowFile will be routed here for each successfully fetched File.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceReader\",\n+                        \"typeDescription\": \"Reads Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceWriter\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n-                        ]\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceWriter\",\n+                        \"typeDescription\": \"Writes Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\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\": \"box-client-service\",\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-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"box-folder-id\": {\n-                                \"description\": \"The ID of the folder from which to pull list of files.\",\n-                                \"displayName\": \"Folder ID\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"box-folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\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+                            \"password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"entities\"\n+                                            \"BASIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"name\": \"password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\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+                            \"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\": \"listing-strategy\",\n+                                \"name\": \"timeout\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"url\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"recursive-search\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Type\",\n+                                        \"propertyName\": \"authentication-type\"\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+                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n-                                \"required\": true,\n+                                \"name\": \"username\",\n+                                \"required\": false,\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+                        \"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.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"storage\"\n+                            \"avro\",\n+                            \"confluent\",\n+                            \"kafka\",\n+                            \"registry\",\n+                            \"schema\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                    },\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-provenance-repository-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateful-analysis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-stateful-analysis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -12691,2209 +17462,1162 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"box-client-service\",\n-                                \"required\": true,\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\": \"2.0.0-M3\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"box-folder-id\",\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+                            \"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\": \"chunked-upload-threshold\",\n+                                \"name\": \"Sub-window length\",\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 Box 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-                            \"create-folder\": {\n-                                \"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\": \"Subfolder Name\",\n-                                        \"propertyName\": \"subfolder-name\"\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+                            \"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\": \"create-folder\",\n+                                \"name\": \"Time window\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"Value to track\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"subfolder-name\",\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+                        \"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\": \"Files that have been successfully written to Box are transferred to this relationship.\",\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\": \"Files that could not be written to Box for some reason are transferred to this relationship.\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"Attribute Expression Language\",\n+                            \"data science\",\n+                            \"rolling\",\n+                            \"state\",\n+                            \"window\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The rolling window value (sum of all the values stored).\",\n+                                \"name\": \"rolling_window_value\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n+                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_count\"\n                             },\n                             {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n+                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_mean\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_variance\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\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\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\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-                            \"Compress 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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n+                                \"name\": \"authentication-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n+                                \"name\": \"connection-attempt-timeout\",\n                                 \"required\": true,\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+                            \"connection-timeout\": {\n+                                \"defaultValue\": \"3 sec\",\n+                                \"description\": \"The timeout to connect the WebSocket URI.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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\": \"2.0.0-M3\"\n-                                }\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+                                \"name\": \"connection-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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\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\": \"s2s-http-proxy-password\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-authorization\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\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\": \"s2s-transport-protocol\",\n+                                \"name\": \"input-buffer-size\",\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"db\",\n-                            \"record\",\n-                            \"s2s\",\n-                            \"site\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.sink.SiteToSiteReportingRecordSink\",\n-                        \"typeDescription\": \"Provides a service to write records using a configured RecordSetWriter over a Site-to-Site connection.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to send sensitive details contained in bulletin events to any external system.\",\n-                                \"requiredPermission\": \"export nifi details\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress 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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\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\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n+                                \"name\": \"max-text-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n+                            \"proxy-host\": {\n+                                \"description\": \"The host name of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-host\",\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+                            \"proxy-port\": {\n+                                \"description\": \"The port number of the HTTP Proxy.\",\n+                                \"displayName\": \"HTTP Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-port\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"name\": \"session-maintenance-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\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\": \"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.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\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\": \"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\": \"include-null-values\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n+                            \"user-name\": {\n+                                \"description\": \"The user name for Basic Authentication.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"user-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n+                            \"user-password\": {\n+                                \"description\": \"The user password for Basic Authentication.\",\n+                                \"displayName\": \"User Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"user-password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\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\": \"s2s-transport-protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bulletin\",\n-                            \"site\",\n-                            \"site to site\"\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"client\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteBulletinReportingTask\",\n-                        \"typeDescription\": \"Publishes Bulletin events using the Site To Site protocol. Note: only up to 5 bulletins are stored per component and up to 10 bulletins at controller level for a duration of up to 5 minutes. If this reporting task is not scheduled frequently enough some bulletins may not be sent.\",\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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\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-                            \"Compress 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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\n+                                \"name\": \"auth-path-spec\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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\": \"auth-roles\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"include-null-values\": {\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                                 \"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\": \"include-null-values\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\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\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-metrics-application-id\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics\",\n-                                \"displayName\": \"Application ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-metrics-application-id\",\n+                                \"name\": \"basic-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-metrics-format\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Metrics will be formatted according to the Ambari Metrics API. See Additional Details in Usage documentation.\",\n-                                        \"displayName\": \"Ambari Format\",\n-                                        \"value\": \"ambari-format\"\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\": \"Metrics will be formatted using the Record Writer property of this reporting task. See Additional Details in Usage documentation to have the description of the default schema.\",\n-                                        \"displayName\": \"Record Format\",\n-                                        \"value\": \"record-format\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ambari-format\",\n-                                \"description\": \"The output format that will be used for the metrics. If Record Format is selected, a Record Writer must be provided. If Ambari Format is selected, the Record Writer property should be empty.\",\n-                                \"displayName\": \"Output Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-metrics-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-metrics-hostname\": {\n-                                \"defaultValue\": \"${hostname(true)}\",\n-                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-metrics-hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\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\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\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\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\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-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteMetricsReportingTask\",\n-                        \"typeDescription\": \"Publishes same metrics as the Ambari Reporting task using the Site To Site protocol.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to send sensitive details contained in Provenance events to any external system.\",\n-                                \"requiredPermission\": \"export nifi details\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"client-authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress 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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\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\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"name\": \"input-buffer-size\",\n                                 \"required\": 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+                            \"listen-port\": {\n+                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n+                                \"displayName\": \"Listen Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"name\": \"listen-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"include-null-values\": {\n+                            \"login-service\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"include-null-values\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\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\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\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, UPLOAD, 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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, UPLOAD, 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-id-filter-exclude\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"name\": \"login-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"stateful\": {\n-                            \"description\": \"Stores the Reporting Task's last event Id so that on restart the task knows where it left off.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lineage\",\n-                            \"provenance\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"tracking\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteProvenanceReportingTask\",\n-                        \"typeDescription\": \"Publishes Provenance events using the Site To Site protocol.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Component Name Filter Regex\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A regex specifying which component names to report.  Any component name matching this regex will be included.\",\n-                                \"displayName\": \"Component Name Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Component Name Filter Regex\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Component Type Filter Regex\": {\n-                                \"defaultValue\": \"(Processor|ProcessGroup|RemoteProcessGroup|RootProcessGroup|Connection|InputPort|OutputPort)\",\n-                                \"description\": \"A regex specifying which component types to report.  Any component type matching this regex will be included.  Component types are: Processor, RootProcessGroup, ProcessGroup, RemoteProcessGroup, Connection, InputPort, OutputPort\",\n-                                \"displayName\": \"Component Type Filter Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Component Type Filter Regex\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress 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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\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\": \"Compress Events\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Destination URL\": {\n-                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n-                                \"displayName\": \"Destination URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Destination URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Input Port Name\": {\n-                                \"description\": \"The name of the Input Port to deliver data to.\",\n-                                \"displayName\": \"Input Port Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Port Name\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Platform\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The value to use for the platform field in each status record.\",\n-                                \"displayName\": \"Platform\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"name\": \"max-text-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service to use when communicating with the destination. If not specified, communications will not be secure.\",\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\": \"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.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\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\": \"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\": \"include-null-values\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"s2s-http-proxy-hostname\": {\n-                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n-                                \"displayName\": \"HTTP Proxy hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-password\": {\n-                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"s2s-http-proxy-port\": {\n-                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n-                                \"displayName\": \"HTTP Proxy port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-http-proxy-username\": {\n-                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n-                                \"displayName\": \"HTTP Proxy username\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"users-properties-file\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-transport-protocol\",\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-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"history\",\n-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\n+                            \"Jetty\",\n+                            \"WebSocket\",\n+                            \"server\"\n                         ],\n-                        \"type\": \"org.apache.nifi.reporting.SiteToSiteStatusReportingTask\",\n-                        \"typeDescription\": \"Publishes Status events using the Site To Site protocol.  The component type and name filter regexes form a union: only components matching both regexes will be reported.  However, all process groups are recursively searched for matching components, regardless of whether the process group matches the component filters.\",\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\": \"2.0.0-M3\"\n                     }\n-                ]\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-web-client-provider-service-nar\",\n+            \"artifact\": \"nifi-kerberos-user-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                            \"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\": \"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\": \"2.0.0-M3\"\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-                            \"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+                            \"Kerberos Keytab\": {\n+                                \"description\": \"Kerberos keytab associated with the principal.\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redirect-handling-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Keytab\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"write-timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.web.client.provider.api.WebClientServiceProvider\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Client\",\n-                            \"HTTP\",\n-                            \"Web\"\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\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+                        \"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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-shared-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-scripting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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.lookup.LookupService\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"script\"\n+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Password\",\n+                            \"Principal\",\n+                            \"Security\"\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.\",\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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                                \"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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\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+                                \"name\": \"Kerberos Principal\",\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 Ticket Cache File\": {\n+                                \"description\": \"Kerberos ticket cache associated with the principal.\",\n+                                \"displayName\": \"Kerberos Ticket Cache File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\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                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n                                 \"version\": \"2.0.0-M3\"\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.kerberos.SelfContainedKerberosUserService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"lookup\",\n-                            \"script\"\n+                            \"Authentication\",\n+                            \"Cache\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Principal\",\n+                            \"Security\",\n+                            \"Ticket\"\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.\",\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hubspot-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hubspot-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                        \"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\": \"10 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"incremental-delay\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-initial-start-time\",\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+                            \"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\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"is-incremental\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"description\": \"The HubSpot Object Type requested\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"object-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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n+                                \"name\": \"result-limit\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"recordFactory\",\n-                            \"script\"\n+                            \"hubspot\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                                \"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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"Script Body\",\n+                                \"name\": \"application-default-credentials\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"compute-engine-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n-                                \"required\": true,\n+                                \"name\": \"compute-engine-credentials\",\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+                            \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"service-account-json\": {\n+                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n+                                \"displayName\": \"Service Account JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\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-                                \"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\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"script\",\n-                            \"writer\"\n+                            \"credentials\",\n+                            \"gcp\",\n+                            \"provider\"\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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                            \"Bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\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+                            \"Name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"gcp-credentials-provider-service\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\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+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"record\",\n-                            \"record sink\",\n-                            \"script\"\n+                            \"file\",\n+                            \"gcs\",\n+                            \"resource\"\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+                        \"type\": \"org.apache.nifi.processors.gcp.storage.GCSFileResourceService\",\n+                        \"typeDescription\": \"Provides a Google Compute Storage (GCS) file resource for other components.\",\n                         \"version\": \"2.0.0-M3\"\n                     }\n                 ],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -14901,147 +18625,209 @@\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"bigquery-api-endpoint\",\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+                            \"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\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"bq.append.record.count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"bq.dataset\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables 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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"bq.table.name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bq.transfer.type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"Use streaming record handling strategy\",\n+                                        \"displayName\": \"STREAM\",\n+                                        \"value\": \"STREAM\"\n                                     },\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"description\": \"Use batching record handling strategy\",\n+                                        \"displayName\": \"BATCH\",\n+                                        \"value\": \"BATCH\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Clojure\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"bq.transfer.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+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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+                            \"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\": \"2.0.0-M3\"\n+                                }\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\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 be processed\",\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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"clojure\",\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"script\"\n+                            \"bigquery\",\n+                            \"bq\",\n+                            \"google\",\n+                            \"google cloud\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15049,316 +18835,622 @@\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+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Folder ID\\\" property should be set to the ID of the Google Drive folder that files reside in.     See processor documentation / additional details for more information on how to determine a Google Drive folder's ID.\\n    If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GOOGLE_DRIVE_FOLDER_ID}`.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the folder.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGoogleDrive.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"File ID\\\" = \\\"${drive.id}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in a Google Drive folder\",\n+                                \"keywords\": [\n+                                    \"google\",\n+                                    \"drive\",\n+                                    \"google cloud\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"multiProcessorUseCases\": [],\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+                            \"Google Doc Export 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+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Web Page (HTML)\",\n+                                        \"value\": \"application/zip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EPUB\",\n+                                        \"value\": \"application/epub+zip\"\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Google Doc Export Type\",\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+                            \"Google Drawing Export Type\": {\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+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SVG\",\n+                                        \"value\": \"image/svg+xml\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Google Drawing Export Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Google Presentation Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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+                                    },\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\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"Google Presentation Export 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+                            \"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\": \"Microsoft Excel\",\n+                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\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+                                    {\n+                                        \"description\": \"\",\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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Google Spreadsheet Export Type\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [],\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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"script\"\n+                            \"drive\",\n+                            \"fetch\",\n+                            \"google\",\n+                            \"storage\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\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+                            \"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+                                \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"et-time-window\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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                                 \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\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+                                \"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.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Script Body\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Script Engine\": {\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"name\": \"recursive-search\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n                         ],\n-                        \"sideEffectFree\": true,\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\": \"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+                                \"description\": \"All FlowFiles that are received are routed to success\",\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-                            {\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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"record\",\n-                            \"script\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\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 number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\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 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-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15366,199 +19458,199 @@\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 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                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"chunked-upload-size\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"chunked-upload-threshold\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\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\": \"Script Engine\",\n+                                \"name\": \"conflict-resolution-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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\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.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedValidateRecord\"\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\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\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\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+                                \"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\": \"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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"record\",\n-                            \"script\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"put\",\n+                            \"storage\"\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.gcp.drive.PutGoogleDrive\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file in Google Drive.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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 id of the file\",\n+                                \"name\": \"drive.id\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\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 number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"drive.size\"\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 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\": \"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 error code returned by Google Drive\",\n+                                \"name\": \"error.code\"\n                             },\n                             {\n-                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The error message returned by Google Drive\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15566,185 +19658,153 @@\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 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                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\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\": \"Record Writer\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-endpoint\",\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\": \"2.0.0-M3\"\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+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\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\": \"Script Engine\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\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+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"gcp-pubsub-subscription\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.jolt.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+                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\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 are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"filter\",\n-                            \"groovy\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"script\",\n-                            \"transform\",\n-                            \"update\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.ackId\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.messageSize\"\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\": \"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\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -15752,306 +19812,578 @@\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+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\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                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\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\": \"Record Writer\",\n+                                \"name\": \"Input 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.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Message Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Message Derivation Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\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\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n-                                \"description\": \"The Language to use for the script\",\n-                                \"displayName\": \"Script Language\",\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\": \"Script Engine\",\n+                                \"name\": \"Message Derivation 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+                            \"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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\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 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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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. 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\": \"2.0.0-M3\"\n+                                }\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+                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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+                                \"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\": \"In case of any issue during processing the incoming flow file, the incoming FlowFile will be 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-                                \"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+                                \"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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"groovy\",\n-                            \"record\",\n-                            \"script\",\n-                            \"validate\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.count.records\"\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\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"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+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\n+                                }\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+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"A script engine property to update\",\n-                                \"value\": \"The value to set it to\"\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-bytes-outstanding\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-messages-outstanding\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                        \"explicitRestrictions\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"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+                            {\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"2.0.0-M3\"\n+                                }\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"name\": \"gcp-batch-bytes\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcp-ordering-key\",\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+                            \"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\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"gcp-pubsub-topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\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+                                \"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-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": 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-                            \"execute\",\n-                            \"groovy\",\n-                            \"reporting\",\n-                            \"script\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\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\": \"2.0.0-M3\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jolt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-jolt-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16064,232 +20396,152 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Custom Module Directory\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\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+                            \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Custom Module Directory\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Custom Transformation Class Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Custom Transformation Class Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Specification\": {\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+                            \"gcs-bucket\": {\n+                                \"defaultValue\": \"${gcs.bucket}\",\n+                                \"description\": \"Bucket of the object.\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Jolt Specification\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Transform\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\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\": \"Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\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\": \"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-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transform\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Jolt Transform\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-generation\",\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+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\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+                            \"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\": \"Pretty Print\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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 FlowFile with transformed content will be routed 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\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed 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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"json\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\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.jolt.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16299,1488 +20551,2878 @@\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Custom Module Directory\": {\n-                                \"dependencies\": [\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the GCS bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GCS_SOURCE_BUCKET}`.\\nConfigure the \\\"Project ID\\\" property to reflect the ID of your Google Compute Cloud Project.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGCSObject.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${gcs.bucket}\\\"\\n\\\"Name\\\" = \\\"${filename}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\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+                                \"description\": \"Retrieve all files in a Google Compute Storage (GCS) bucket\",\n+                                \"keywords\": [\n+                                    \"gcp\",\n+                                    \"gcs\",\n+                                    \"google cloud\",\n+                                    \"google compute storage\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Custom Module Directory\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Custom Transformation Class Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Custom Transformation Class Name\",\n-                                \"required\": false,\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Specification\": {\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Jolt Specification\",\n+                                \"name\": \"gcs-generation\",\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\": \"Shift input JSON/data to create the output JSON.\",\n-                                        \"displayName\": \"Shift\",\n-                                        \"value\": \"jolt-transform-shift\"\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\": \"Remove values from input data to create the output JSON.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"jolt-transform-remove\"\n-                                    },\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\": \"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-                                        \"description\": \"Writes when key is missing or value is null\",\n-                                        \"displayName\": \"Modify - Default\",\n-                                        \"value\": \"jolt-transform-modify-default\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transform\",\n+                            \"gcs-key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"Name of the object.\",\n+                                \"displayName\": \"Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Jolt Transform\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-range-length\",\n+                                \"required\": false,\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"jolt-record-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"Environment variables 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. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\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+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cardinality\",\n-                            \"chainr\",\n-                            \"defaultr\",\n-                            \"jolt\",\n-                            \"record\",\n-                            \"removr\",\n-                            \"shiftr\",\n-                            \"sort\",\n-                            \"transform\"\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.jolt.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-record-serialization-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache 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\": \"cache-size\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"et-initial-listing-target\": {\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\": \"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\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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-                                        \"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+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\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+                                \"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\": \"schema-access-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-state-cache\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"window\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n+                                        \"propertyName\": \"et-initial-listing-target\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcs-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-use-generations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\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\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\n+                                \"name\": \"gcs-use-generations\",\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.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"schema-registry\",\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. 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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-api-url\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"comma\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"list\",\n+                            \"storage\"\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\": \"2.0.0-M3\"\n+                        \"triggerSerially\": true,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Schema Reference Writer\": {\n+                            \"File Resource Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-writer\"\n+                                            \"FILE_RESOURCE_SERVICE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n-                                \"displayName\": \"Schema Reference Writer\",\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\": \"Schema Reference Writer\",\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.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Schema Write Strategy\": {\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n                                 \"allowableValues\": [\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-                                    },\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+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n-                                        \"displayName\": \"Schema Reference Writer\",\n-                                        \"value\": \"schema-reference-writer\"\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\": \"avro-embedded\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\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\": \"Schema Write Strategy\",\n+                                \"name\": \"Resource Transfer Source\",\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+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-project-id\",\n+                                \"required\": false,\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\": \"cache-size\",\n+                                \"name\": \"gcp-retry-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-bucket\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-content-disposition-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"description\": \"Indicates that the object should be loaded and rendered within the browser.\",\n+                                        \"displayName\": \"Inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-object-acl\": {\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\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\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\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\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\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\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\": \"compression-format\",\n-                                \"required\": true,\n+                                \"name\": \"gcs-object-acl\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"encoder-pool-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-object-crc32c\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"gcs-overwrite-object\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"gcs-overwrite-object\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\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\": \"Environment variables 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-                                        \"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 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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gzip.content.enabled\",\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+                            \"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\": \"schema-cache\",\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.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\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+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\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.gcp.storage.PutGCSObject\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as an object in a Google Cloud Storage.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\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-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference 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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"Environment variables 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+                        \"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+                            },\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+                        \"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.GetGcpVisionAnnotateImagesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"schema-registry\",\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\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n                                 \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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.StartGcpVisionAnnotateFilesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on file input. It should be followed by GetGcpVisionAnnotateFilesOperationStatus processor in order to monitor operation status.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n+                                \"name\": \"operationKey\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"json-payload\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"vision-feature-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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.StartGcpVisionAnnotateImagesOperation\",\n+                        \"typeDescription\": \"Trigger a Vision operation on image input. It should be followed by GetGcpVisionAnnotateImagesOperationStatus processor in order to monitor operation status.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Kerberos Keytab\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"restricted\": true,\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+                            \"Authentication\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Keytab\",\n+                            \"Principal\",\n+                            \"Security\"\n                         ],\n-                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n-                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-smbj-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-smbj-client-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"accept-empty-extensions\": {\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+                                \"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-                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n-                                \"displayName\": \"Accept empty extensions\",\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\": \"accept-empty-extensions\",\n+                                \"name\": \"enable-dfs\",\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+                            \"hostname\": {\n+                                \"description\": \"The network host of the SMB file server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"datetime-representation\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"inference-strategy\": {\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"port\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Includes only CEF header fields into the inferred schema.\",\n-                                        \"displayName\": \"Headers only\",\n-                                        \"value\": \"headers-only\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\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\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\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\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\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\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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\": \"Defines the set of fields should be included in the schema and the way the fields are being interpreted.\",\n-                                \"displayName\": \"Inference Strategy\",\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\": \"inference-strategy\",\n+                                \"name\": \"smb-dialect\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"timeout\": {\n+                                \"defaultValue\": \"5 sec\",\n+                                \"description\": \"Timeout for read and write operations.\",\n+                                \"displayName\": \"Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"raw-message-field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"use-encryption\": {\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"use-encryption\",\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+                            \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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. 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-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"groovyx-additional-classpath\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-inference-cache\": {\n-                                \"dependencies\": [\n+                            \"groovyx-failure-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"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+                                \"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\": \"schema-inference-cache\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"groovyx-script-body\",\n                                 \"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\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n+                            {\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-reader\",\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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"read-timeout\",\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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-api-version\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-url\",\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\": \"2.0.0-M3\"\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.salesforce.QuerySalesforceObject\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cef\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"put\",\n+                            \"salesforce\",\n+                            \"sobject\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The error message returned by Salesforce.\",\n+                                \"name\": \"error.message\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"age-delay\": {\n+                                \"dependencies\": [\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+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\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+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CSV Format\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"age-delay\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n+                            \"age-field\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"age-field\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n+                                \"name\": \"create-zero-record-files\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n+                            \"custom-soql-query\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"custom-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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\": \"Specify the SOQL query to run.\",\n+                                \"displayName\": \"Custom SOQL Query\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"name\": \"custom-soql-query\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null String\": {\n+                            \"custom-where-condition\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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+                                \"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\": \"Null String\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"custom-where-condition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"field-names\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"field-names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Separator\": {\n-                                \"defaultValue\": \"\\\\n\",\n+                            \"initial-age-filter\": {\n                                 \"dependencies\": [\n                                     {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n+                                    },\n+                                    {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the characters to use in order to separate CSV Records\",\n-                                \"displayName\": \"Record Separator\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"initial-age-filter\",\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\": \"Record Separator\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Skip Header Line\": {\n+                            \"query-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Provide query by properties.\",\n+                                        \"displayName\": \"Property Based Query\",\n+                                        \"value\": \"property-based-query\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Provide custom SOQL query.\",\n+                                        \"displayName\": \"Custom Query\",\n+                                        \"value\": \"custom-query\"\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+                                \"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\": \"Skip Header Line\",\n+                                \"name\": \"query-type\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"record-writer\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\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\": \"Trim Fields\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-api-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim double quote\": {\n-                                \"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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"salesforce-url\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sobject-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"rfc-4180\"\n+                                            \"property-based-query\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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+                                \"description\": \"The Salesforce sObject to be queried\",\n+                                \"displayName\": \"sObject Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sobject-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\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\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"name\": \"success\"\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+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"query\",\n+                            \"salesforce\",\n+                            \"sobject\",\n+                            \"soql\"\n+                        ],\n+                        \"triggerSerially\": true,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-windows-event-log-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-windows-event-log-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Trim double quote\",\n+                                \"name\": \"maxBuffer\",\n                                 \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maxQueue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-reader-csv-parser\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"mongo-uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-write-concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Apache Commons CSV library.\",\n-                                        \"displayName\": \"Apache Commons CSV\",\n-                                        \"value\": \"commons-csv\"\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement, using the default write concern configured on the server\",\n+                                        \"displayName\": \"ACKNOWLEDGED\",\n+                                        \"value\": \"ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the Jackson Dataformats library.\",\n-                                        \"displayName\": \"Jackson CSV\",\n-                                        \"value\": \"jackson-csv\"\n+                                        \"description\": \"Write operations that use this write concern will return as soon as the message is written to the socket. Exceptions are raised for network issues, but not server errors\",\n+                                        \"displayName\": \"UNACKNOWLEDGED\",\n+                                        \"value\": \"UNACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"The CSV parser implementation from the FastCSV library. NOTE: This parser only officially supports RFC-4180, so it recommended to set the 'CSV Format' property to 'RFC 4180'. It does handle some non-compliant CSV data, for that case set the 'CSV Format' property to 'CUSTOM' and the other custom format properties (such as 'Trim Fields', 'Trim double quote', etc.) as appropriate. Be aware that this may cause errors if FastCSV doesn't handle the property settings correctly (such as 'Ignore Header'), but otherwise may process the input as expected even if the data is not fully RFC-4180 compliant.\",\n-                                        \"displayName\": \"FastCSV\",\n-                                        \"value\": \"fast-csv\"\n+                                        \"description\": \"Deprecated.  Use of \\\"JOURNALED\\\" is preferred\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write operations wait for the server to group commit to the journal file on disk\",\n+                                        \"displayName\": \"JOURNALED\",\n+                                        \"value\": \"JOURNALED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deprecated.  Use of \\\"W2\\\" is preferred\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation\",\n+                                        \"displayName\": \"MAJORITY\",\n+                                        \"value\": \"MAJORITY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from a single member\",\n+                                        \"displayName\": \"W1\",\n+                                        \"value\": \"W1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from two members\",\n+                                        \"displayName\": \"W2\",\n+                                        \"value\": \"W2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from three members\",\n+                                        \"displayName\": \"W3\",\n+                                        \"value\": \"W3\"\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+                                \"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\": \"csv-reader-csv-parser\",\n+                                \"name\": \"mongo-write-concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csvutils-allow-duplicate-header-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-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\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.\\nHandling 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* FastCSV - duplicate headers will be de-duplicated with the field value being that of the left-most duplicate CSV column\",\n-                                \"displayName\": \"Allow Duplicate Header Names\",\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\": \"csvutils-allow-duplicate-header-names\",\n+                                \"name\": \"ssl-client-auth\",\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+                            \"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\": \"csvutils-character-set\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-collection-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables 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\": \"ignore-csv-header\",\n+                                \"name\": \"mongo-lookup-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\": \"2.0.0-M3\"\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@@ -17789,30 +23431,20 @@\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"infer-schema\",\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\": \"schema-access-strategy\",\n                                 \"required\": true,\n@@ -17847,45 +23479,20 @@\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n                             \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n                                             \"schema-reference-reader\",\n                                             \"schema-name\"\n                                         ],\n@@ -17948,4124 +23555,3022 @@\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.lookup.LookupService\",\n                                 \"version\": \"2.0.0-M3\"\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+                            \"lookup\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\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+                        \"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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\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-                                \"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-                                    {\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\": \"Environment variables 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-                                    {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Header Line\": {\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\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+                            \"Compress 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 the CSV column names should be written out as the first line.\",\n-                                \"displayName\": \"Include Header Line\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Header Line\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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-                                            \"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+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Trailing Delimiter\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null String\",\n-                                \"required\": false,\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+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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-                                            \"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+                            \"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\": \"Quote Mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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\": \"Record Separator\",\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.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Schema Reference Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-writer\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n-                                \"displayName\": \"Schema Reference Writer\",\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\": \"Schema Reference 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.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n-                                        \"displayName\": \"Schema Reference Writer\",\n-                                        \"value\": \"schema-reference-writer\"\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+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-port\",\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+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\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+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\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+                            }\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\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"db\",\n+                            \"record\",\n+                            \"s2s\",\n+                            \"site\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.reporting.sink.SiteToSiteReportingRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured RecordSetWriter over a Site-to-Site connection.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to send sensitive details contained in bulletin events to any external system.\",\n+                                \"requiredPermission\": \"export nifi details\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"csv-writer\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The CSV writer implementation from the Apache Commons CSV library.\",\n-                                        \"displayName\": \"Apache Commons CSV\",\n-                                        \"value\": \"commons-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The CSV writer implementation from the FastCSV library. NOTE: This writer only officially supports RFC-4180, so it recommended to set the 'CSV Format' property to 'RFC 4180'. It does handle some non-compliant CSV data, for that case set the 'CSV Format' property to 'CUSTOM' and the other custom format properties (such as 'Trim Fields', 'Trim double quote', etc.) as appropriate. Be aware that this may cause errors if FastCSV doesn't handle the property settings correctly (such as 'Quote Mode'), but otherwise may process the output as expected even if the data is not fully RFC-4180 compliant.\",\n-                                        \"displayName\": \"FastCSV\",\n-                                        \"value\": \"fast-csv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"commons-csv\",\n-                                \"description\": \"Specifies which writer implementation to use to write CSV records. NOTE: Different writers may support different subsets of functionality and may also exhibit different levels of performance.\",\n-                                \"displayName\": \"CSV Writer\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csv-writer\",\n+                                \"name\": \"Compress Events\",\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+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"csvutils-character-set\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\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+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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-cache\",\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.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"include-null-values\": {\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\": \"Indicate if null values should be included in records. Default will be false\",\n+                                \"displayName\": \"Include Null Values\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-null-values\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"name\": \"s2s-http-proxy-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.schemaregistry.services.SchemaRegistry\",\n-                                    \"version\": \"2.0.0-M3\"\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+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-transport-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-transport-protocol\",\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.RecordSetWriterFactory\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n+                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\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+                            \"bulletin\",\n+                            \"site\",\n+                            \"site to site\"\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+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteBulletinReportingTask\",\n+                        \"typeDescription\": \"Publishes Bulletin events using the Site To Site protocol. Note: only up to 5 bulletins are stored per component and up to 10 bulletins at controller level for a duration of up to 5 minutes. If this reporting task is not scheduled frequently enough some bulletins may not be sent.\",\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Patterns and Expressions can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\",\n-                                        \"URL\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Grok Pattern File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"no-match-behavior\": {\n+                            \"Compress Events\": {\n                                 \"allowableValues\": [\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-                                    },\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\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"no-match-behavior\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n-                                \"allowableValues\": [\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-                                    },\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\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\": \"Environment variables 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+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\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.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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 when communicating with the destination. 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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"false\",\n-                                \"description\": \"Whether to allow comments when parsing the JSON document\",\n-                                \"displayName\": \"Allow Comments\",\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\": \"Allow Comments\",\n+                                \"name\": \"include-null-values\",\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+                            \"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\": \"Date Format\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"s2s-http-proxy-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+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"s2s-http-proxy-port\",\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\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-                                    {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"name\": \"s2s-http-proxy-username\",\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+                            \"s2s-metrics-application-id\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-metrics-application-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n+                            \"s2s-metrics-format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"Metrics will be formatted according to the Ambari Metrics API. See Additional Details in Usage documentation.\",\n+                                        \"displayName\": \"Ambari Format\",\n+                                        \"value\": \"ambari-format\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"Metrics will be formatted using the Record Writer property of this reporting task. See Additional Details in Usage documentation to have the description of the default schema.\",\n+                                        \"displayName\": \"Record Format\",\n+                                        \"value\": \"record-format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"defaultValue\": \"ambari-format\",\n+                                \"description\": \"The output format that will be used for the metrics. If Record Format is selected, a Record Writer must be provided. If Ambari Format is selected, the Record Writer property should be empty.\",\n+                                \"displayName\": \"Output Format\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"s2s-metrics-format\",\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+                            \"s2s-metrics-hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The Hostname of this NiFi instance to be included in the metrics\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-metrics-hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"s2s-transport-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-transport-protocol\",\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonTreeReader\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"jsonpath\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\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+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteMetricsReportingTask\",\n+                        \"typeDescription\": \"Publishes same metrics as the Ambari Reporting task using the Site To Site protocol.\",\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to send sensitive details contained in Provenance events to any external system.\",\n+                                \"requiredPermission\": \"export nifi details\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Allow Scientific Notation\": {\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\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+                            \"Compress 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 or not scientific notation should be used when writing numbers\",\n-                                \"displayName\": \"Allow Scientific Notation\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow Scientific Notation\",\n+                                \"name\": \"Compress Events\",\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+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": 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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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\": \"Date Format\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Pretty Print JSON\": {\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\": \"false\",\n-                                \"description\": \"Specifies whether or not the JSON should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\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\": \"Pretty Print JSON\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Reference Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-writer\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n-                                \"displayName\": \"Schema Reference Writer\",\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\": \"Schema Reference Writer\",\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.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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 schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n-                                        \"displayName\": \"Schema Reference Writer\",\n-                                        \"value\": \"schema-reference-writer\"\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+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n+                                \"name\": \"s2s-http-proxy-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+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"name\": \"s2s-http-proxy-port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression-format\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-username\",\n+                                \"required\": false,\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-                                            \"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+                            \"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, UPLOAD, 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\": \"compression-level\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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, UPLOAD, 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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-grouping\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-cache\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n                                 \"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\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n                                 \"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\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"s2s-transport-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-transport-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"suppress-nulls\": {\n+                            \"start-position\": {\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\": \"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\": \"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\": \"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\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"suppress-nulls\",\n+                                \"name\": \"start-position\",\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.RecordSetWriterFactory\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n+                        \"restricted\": true,\n+                        \"stateful\": {\n+                            \"description\": \"Stores the Reporting Task's last event Id so that on restart the task knows where it left off.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"resultset\",\n-                            \"row\",\n-                            \"serialize\",\n-                            \"writer\"\n+                            \"lineage\",\n+                            \"provenance\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"tracking\"\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+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events using the Site To Site protocol.\",\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\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+                            \"Batch Size\": {\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\": \"Allow Comments\",\n+                                \"name\": \"Batch Size\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait to a response from the destination before deciding that an error has occurred and canceling the transaction\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max String Length\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Component Name Filter Regex\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A regex specifying which component names to report.  Any component name matching this regex will be included.\",\n+                                \"displayName\": \"Component Name Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Component Name Filter Regex\",\n+                                \"required\": true,\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+                            \"Component Type Filter Regex\": {\n+                                \"defaultValue\": \"(Processor|ProcessGroup|RemoteProcessGroup|RootProcessGroup|Connection|InputPort|OutputPort)\",\n+                                \"description\": \"A regex specifying which component types to report.  Any component type matching this regex will be included.  Component types are: Processor, RootProcessGroup, ProcessGroup, RemoteProcessGroup, Connection, InputPort, OutputPort\",\n+                                \"displayName\": \"Component Type Filter Regex\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Component Type Filter Regex\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Compress Events\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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\": \"true\",\n+                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n+                                \"displayName\": \"Compress Events\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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-                                            \"schema-reference-reader\",\n-                                            \"schema-name\",\n-                                            \"schema-text-property\"\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+                            \"Destination URL\": {\n+                                \"description\": \"The URL of the destination NiFi instance or, if clustered, a comma-separated list of address in the format of http(s)://host:port/nifi. This destination URL will only be used to initiate the Site-to-Site connection. The data sent by this reporting task will be load-balanced on all the nodes of the destination (if clustered).\",\n+                                \"displayName\": \"Destination URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-application-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Destination URL\",\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+                            \"Input Port Name\": {\n+                                \"description\": \"The name of the Input Port to deliver data to.\",\n+                                \"displayName\": \"Input Port Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Port Name\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Platform\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The value to use for the platform field in each status record.\",\n+                                \"displayName\": \"Platform\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use when communicating with the destination. 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-inference-cache\",\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.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"include-null-values\": {\n+                                \"allowableValues\": [\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\n+                                \"name\": \"include-null-values\",\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.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"s2s-http-proxy-hostname\": {\n+                                \"description\": \"Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance.\",\n+                                \"displayName\": \"HTTP Proxy hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"s2s-http-proxy-password\": {\n+                                \"description\": \"Specify an user password to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"s2s-http-proxy-port\": {\n+                                \"description\": \"Specify the proxy server's port number, optional. If not specified, default port 80 will be used.\",\n+                                \"displayName\": \"HTTP Proxy port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-port\",\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+                            \"s2s-http-proxy-username\": {\n+                                \"description\": \"Specify an user name to connect to the proxy server, optional.\",\n+                                \"displayName\": \"HTTP Proxy username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-name\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-strategy\": {\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Begins processing from the root node.\",\n-                                        \"displayName\": \"Root Node\",\n-                                        \"value\": \"ROOT_NODE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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+                                \"defaultValue\": \"RAW\",\n+                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n+                                \"displayName\": \"Transport Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-strategy\",\n+                                \"name\": \"s2s-transport-protocol\",\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonPathReader\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"tree\"\n+                            \"history\",\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\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+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteStatusReportingTask\",\n+                        \"typeDescription\": \"Publishes Status events using the Site To Site protocol.  The component type and name filter regexes form a union: only components matching both regexes will be reported.  However, all process groups are recursively searched for matching components, regardless of whether the process group matches the component filters.\",\n                         \"version\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-network-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Name of the RecordReader\",\n-                                \"value\": \"A RecordReaderFactory controller service\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FIELDS_DESTINATION\",\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\": \"2.0.0-M3\"\n+                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n+                                \"name\": \"udp.port\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"sideEffectFree\": true,\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Service to Use\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred 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\": \"2.0.0-M3\"\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.lookup.ReaderLookup\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"lookup\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"attributes\",\n+                            \"byte\",\n+                            \"datagram\",\n+                            \"netflow\",\n+                            \"network\",\n+                            \"packet\",\n+                            \"v5\"\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\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-web-client-provider-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-cache-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"connect-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.serialization.RecordSchemaCacheService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"Character Set\",\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\": \"2.0.0-M3\"\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-                            \"syslog-5424-reader-raw-message\": {\n+                            \"redirect-handling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"FOLLOWED\",\n+                                        \"value\": \"FOLLOWED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"IGNORED\",\n+                                        \"value\": \"IGNORED\"\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\": \"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\": \"syslog-5424-reader-raw-message\",\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.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                                \"dynamic\": 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.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                 \"version\": \"2.0.0-M3\"\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+                            \"Client\",\n+                            \"HTTP\",\n+                            \"Web\"\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+                        \"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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-update-attribute-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-update-attribute-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Environment variables 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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Stateful Variables Initial Value\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"syslog-5424-reader-raw-message\": {\n+                            \"Store State\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Do not store state\",\n+                                        \"value\": \"Do not store state\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Store state locally\",\n+                                        \"value\": \"Store state locally\"\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\": \"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\": \"syslog-5424-reader-raw-message\",\n+                                \"name\": \"Store State\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            },\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\": \"Character Set\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Text\",\n+                                \"name\": \"canonical-value-lookup-cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\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+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"delete\",\n+                            \"modification\",\n+                            \"state\",\n+                            \"update\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\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+                        \"useCases\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the newly added attribute.\\nThe value of the property will become the value of the newly added attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\",\n+                                \"description\": \"Add a new FlowFile attribute\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the attribute whose value will be overwritten.\\nThe value of the property will become the new value of the attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\\nFor example, to change the `txId` attribute to the uppercase version of its current value, add a property named `txId` with a value of `${txId:toUpper()}`\\n\",\n+                                \"description\": \"Overwrite a FlowFile attribute with a new value\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property whose name is `filename` and whose value is the desired filename.\\n\\nFor example, to set the filename to `abc.txt`, add a property named `filename` with a value of `abc.txt`.\\nTo add the `txId` attribute as a prefix to the filename, add a property named `filename` with a value of `${txId}${filename}`.\\nOr, to make the filename more readable, separate the txId from the rest of the filename with a hyphen by using a value of `${txId}-${filename}`.\\n\",\n+                                \"description\": \"Rename a file\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\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\": \"2.0.0-M3\"\n-                    },\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-framework-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-6-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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-                            \"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-                                \"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+                            \"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\": \"Timestamp Format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"attribute_prefix\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"content_field_name\",\n-                                \"required\": false,\n+                                \"name\": \"ack.wait.time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"parse_xml_attributes\": {\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\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-                                        \"dependentValues\": [\n-                                            \"infer-schema\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"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+                                \"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\": \"parse_xml_attributes\",\n-                                \"required\": false,\n+                                \"name\": \"acks\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"record_format\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"compression.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+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\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\": \"gzip\",\n+                                        \"value\": \"gzip\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\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\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"compression.type\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\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+                            \"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\": \"schema-inference-cache\",\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.RecordSchemaCacheService\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"reader\",\n+                            \"kafka\",\n                             \"record\",\n-                            \"xml\"\n+                            \"sink\"\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.record.sink.kafka.KafkaRecordSink_2_6\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n                         \"version\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Date Format\",\n+                                \"name\": \"Commit Offsets\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Reference Writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-writer\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Write Strategy\",\n-                                        \"propertyName\": \"Schema Write Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for writing FlowFile attributes or content header with Schema reference information\",\n-                                \"displayName\": \"Schema Reference Writer\",\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\": \"Schema Reference Writer\",\n+                                \"name\": \"Communications 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.schemaregistry.services.SchemaReferenceWriter\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Schema Write Strategy\": {\n+                            \"auto.offset.reset\": {\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+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\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\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n                                     },\n                                     {\n-                                        \"description\": \"The schema reference information will be written through a configured Schema Reference Writer service implementation.\",\n-                                        \"displayName\": \"Schema Reference Writer\",\n-                                        \"value\": \"schema-reference-writer\"\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\": \"no-schema\",\n-                                \"description\": \"Specifies how the schema for a Record should be added to the data.\",\n-                                \"displayName\": \"Schema Write Strategy\",\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\": \"Schema Write Strategy\",\n+                                \"name\": \"auto.offset.reset\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\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+                            \"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\": \"array_tag_name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"array_wrapping\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"omit_xml_declaration\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"header-name-regex\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not to include XML declaration\",\n-                                \"displayName\": \"Omit XML Declaration\",\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\": \"omit_xml_declaration\",\n-                                \"required\": true,\n+                                \"name\": \"header-name-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"pretty_print_xml\": {\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\": \"false\",\n-                                \"description\": \"Specifies whether or not the XML should be pretty printed\",\n-                                \"displayName\": \"Pretty Print XML\",\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\": \"pretty_print_xml\",\n+                                \"name\": \"honor-transactions\",\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-                            \"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+                            \"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\": \"root_tag_name\",\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.SelfContainedKerberosUserService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"key-attribute-encoding\": {\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+                                        \"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 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\": \"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 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\": \"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\": \"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+                                \"defaultValue\": \"utf-8\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"USE_VALUE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-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\": \"Environment variables 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+                                \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"key-format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-reference-reader\": {\n+                                \"defaultValue\": \"byte-array\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n+                                            \"USE_WRAPPER\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\n+                                \"name\": \"key-format\",\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.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n+                            \"key-record-reader\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n+                                            \"record\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"key-format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-text-property\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-uncommit-offset-wait\",\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.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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"suppress_nulls\": {\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\": \"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\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\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\": \"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\": \"never-suppress\",\n-                                \"description\": \"Specifies how the writer should handle a null field\",\n-                                \"displayName\": \"Suppress Null Values\",\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\": \"suppress_nulls\",\n+                                \"name\": \"output-strategy\",\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.RecordSetWriterFactory\",\n-                                \"version\": \"2.0.0-M3\"\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-                        ],\n-                        \"type\": \"org.apache.nifi.xml.XMLRecordSetWriter\",\n-                        \"typeDescription\": \"Writes a RecordSet to XML. The records are wrapped by a root tag.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            },\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\": \"Date Format\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Time Format\",\n-                                \"required\": false,\n-                                \"sensitive\": 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.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Timestamp Format\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"sasl.mechanism\": {\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+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\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\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\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\": \"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\": \"The schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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\": \"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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\",\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"NESTED_FIELD\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Starting Field Strategy\",\n-                                        \"propertyName\": \"starting-field-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"schema-application-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"schema-branch\": {\n-                                \"dependencies\": [\n+                            \"sasl.token.auth\": {\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 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-inference-cache\": {\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"infer-schema\"\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"schema-inference-cache\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"sasl.username\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-reader\",\n+                                \"name\": \"security.protocol\",\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.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n+                            \"separate-by-key\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\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 Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"starting-field-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"topic\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"starting-field-strategy\": {\n+                            \"topic_type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Begins processing from the root node.\",\n-                                        \"displayName\": \"Root Node\",\n-                                        \"value\": \"ROOT_NODE\"\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\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+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\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+                                \"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\": \"starting-field-strategy\",\n+                                \"name\": \"topic_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.serialization.RecordReaderFactory\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.json.JsonPathReader\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"tree\",\n-                            \"yaml\"\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-                        \"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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-lookup-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"explicitRestrictions\": [\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-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\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\": \"ENVIRONMENT\",\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Commit Offsets\": {\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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n+                                \"name\": \"Commit Offsets\",\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\": \"Environment variables 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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-                                            \"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+                            \"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\": \"Quote Mode\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\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-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\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\": \"Trim Fields\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"bootstrap.servers\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"csv-file\",\n+                                \"name\": \"group.id\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\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\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\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\": \"ignore-duplicates\",\n+                                \"name\": \"honor-transactions\",\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+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\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.RecordLookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"character-encoding\": {\n+                            \"key-attribute-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+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\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\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\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\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\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\": \"character-encoding\",\n+                                \"name\": \"key-attribute-encoding\",\n                                 \"required\": true,\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                \"name\": \"max-uncommit-offset-wait\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"enrich\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"map\",\n-                            \"value\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"configuration-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"message-demarcator\",\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\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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: 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+                            \"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\": \"proxy-configuration-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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-authentication-strategy\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Authentication\",\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\": \"Basic Authentication\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n                                     },\n                                     {\n-                                        \"description\": \"OAuth2 Authentication\",\n-                                        \"displayName\": \"OAuth2\",\n-                                        \"value\": \"OAUTH2\"\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\": \"Authentication strategy to use with REST service.\",\n-                                \"displayName\": \"Authentication Strategy\",\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\": \"rest-lookup-authentication-strategy\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-password\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"The password to be used by the client to authenticate against the Remote URL.\",\n-                                \"displayName\": \"Basic Authentication Password\",\n+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-basic-auth-password\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"rest-lookup-basic-auth-username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n-                                    }\n-                                ],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-basic-auth-username\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-connection-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"rest-lookup-digest-auth\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n@@ -22074,1275 +26579,893 @@\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\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+                                \"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\": \"rest-lookup-digest-auth\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-oauth2-access-token-provider\": {\n+                            \"sasl.username\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"OAUTH2\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables managed retrieval of OAuth2 Bearer Token applied to HTTP requests using the Authorization Header.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-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\": \"2.0.0-M3\"\n-                                }\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-read-timeout\",\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+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-record-path\",\n+                                \"name\": \"sasl.username\",\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+                            \"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\": \"rest-lookup-record-reader\",\n+                                \"name\": \"security.protocol\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-response-handling-strategy\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Successful and unsuccessful HTTP responses are returned.\",\n-                                        \"displayName\": \"Returned\",\n-                                        \"value\": \"RETURNED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Successful HTTP responses are returned and unsuccessful HTTP responses generate an exception.\",\n-                                        \"displayName\": \"Evaluated\",\n-                                        \"value\": \"EVALUATED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"RETURNED\",\n-                                \"description\": \"Whether to return all responses or throw errors for unsuccessful HTTP status codes.\",\n-                                \"displayName\": \"Response Handling Strategy\",\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\": \"rest-lookup-response-handling-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\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\": \"rest-lookup-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\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"rest-lookup-url\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.RecordLookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"json\",\n-                            \"lookup\",\n-                            \"rest\",\n-                            \"xml\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n-                        \"typeDescription\": \"Use a REST service to look up values.\",\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"explicitRestrictions\": [\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-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\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\": \"ENVIRONMENT\",\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Failure Strategy\": {\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\": \"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\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\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\": \"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\": \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\n-                                \"dependencies\": [\n+                            \"Record Metadata Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\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-                                \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Comment Marker\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\n+                                \"defaultValue\": \"Use Configured Values\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"USE_WRAPPER\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Metadata Strategy\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quote Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ack.wait.time\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"acks\": {\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+                                        \"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\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\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\": \"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\": \"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-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote 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\": \"Quote Mode\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"attribute-name-regex\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"USE_VALUE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\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\": \"Trim Fields\",\n-                                \"required\": true,\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Value Separator\": {\n-                                \"defaultValue\": \",\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value Separator\",\n-                                \"required\": true,\n+                                \"name\": \"aws.profile.name\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"csv-file\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\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\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\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\": \"ignore-duplicates\",\n+                                \"name\": \"compression.type\",\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+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"Lookup value column.\",\n-                                \"displayName\": \"Lookup Value Column\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-value-column\",\n+                                \"name\": \"max.block.ms\",\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.StringLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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-                        ],\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"dynamicProperties\": [\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\": \"ENVIRONMENT\",\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"configuration-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.request.size\",\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\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Cache Expiration\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\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+                            \"message-key-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"name\": \"message-key-field\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n+                                \"name\": \"partition\",\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+                            \"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 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\n+                            \"publish-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"publish-strategy\",\n                                 \"required\": true,\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n+                                \"name\": \"record-key-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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-value-columns\",\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.RecordLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Cache Expiration\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"\",\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+                            \"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\": \"dbrecord-lookup-clear-cache-on-enabled\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"dbrecord-lookup-dbcp-service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-value-column\",\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.StringLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"database-file\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-anonymous-ip\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"lookup-anonymous-ip\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-city\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sasl.password\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"lookup-city\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"lookup-connection-type\": {\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\": \"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+                                \"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\": \"lookup-connection-type\",\n-                                \"required\": true,\n+                                \"name\": \"sasl.token.auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-domain\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"sasl.username\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-domain\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-isp\": {\n+                            \"security.protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"lookup-isp\",\n+                                \"name\": \"security.protocol\",\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.RecordLookupService\",\n-                                \"version\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Keytab\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"topic\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                                \"name\": \"transactional-id-prefix\",\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+                            \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value to track\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                        ],\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+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\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+                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"data science\",\n-                            \"rolling\",\n-                            \"state\",\n-                            \"window\"\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-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23352,762 +27475,355 @@\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+                                \"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\": \"ENVIRONMENT\",\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                         \"multiProcessorUseCases\": [],\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\": \"Environment variables 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+                            \"Failure Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Do not store state\",\n-                                        \"value\": \"Do not store state\"\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\": \"Store state locally\",\n-                                        \"value\": \"Store state locally\"\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\": \"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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the newly added attribute.\\nThe value of the property will become the value of the newly added attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\",\n-                                \"description\": \"Add a new FlowFile attribute\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property. The name of the property will become the name of the attribute whose value will be overwritten.\\nThe value of the property will become the new value of the attribute. The value may use the NiFi Expression Language in order to reference other\\nattributes or call Expression Language functions.\\n\\nFor example, to change the `txId` attribute to the uppercase version of its current value, add a property named `txId` with a value of `${txId:toUpper()}`\\n\",\n-                                \"description\": \"Overwrite a FlowFile attribute with a new value\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Leave \\\"Delete Attributes Expression\\\" and \\\"Stateful Variables Initial Value\\\" unset.\\nSet \\\"Store State\\\" to \\\"Do not store state\\\".\\n\\nAdd a new property whose name is `filename` and whose value is the desired filename.\\n\\nFor example, to set the filename to `abc.txt`, add a property named `filename` with a value of `abc.txt`.\\nTo add the `txId` attribute as a prefix to the filename, add a property named `filename` with a value of `${txId}${filename}`.\\nOr, to make the filename more readable, separate the txId from the rest of the filename with a hyphen by using a value of `${txId}-${filename}`.\\n\",\n-                                \"description\": \"Rename a file\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"authentication-charset\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection-attempt-timeout\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection-timeout\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-authorization\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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+                                \"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\": \"input-buffer-size\",\n+                                \"name\": \"Failure Strategy\",\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+                            \"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\": \"max-binary-message-size\",\n+                                \"name\": \"ack.wait.time\",\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+                            \"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\": \"max-text-message-size\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-host\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-port\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"session-maintenance-interval\",\n+                                \"name\": \"acks\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"user-name\": {\n-                                \"description\": \"The user name for Basic Authentication.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user-name\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-password\": {\n-                                \"description\": \"The user password for Basic Authentication.\",\n-                                \"displayName\": \"User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-uri\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"client\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"auth-path-spec\",\n+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"auth-roles\",\n-                                \"required\": false,\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"basic-auth\": {\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-                                    }\n-                                ],\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\": \"basic-auth\",\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+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\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+                                \"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\": \"client-authentication\",\n+                                \"name\": \"compression.type\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"kafka-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listen-port\": {\n-                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n-                                \"displayName\": \"Listen Port\",\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Service supporting user authentication with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"listen-port\",\n-                                \"required\": true,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"login-service\": {\n+                            \"key-attribute-encoding\": {\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+                                        \"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\": \"hash\",\n-                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n-                                \"displayName\": \"Login Service\",\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\": \"login-service\",\n-                                \"required\": false,\n+                                \"name\": \"key-attribute-encoding\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max.block.ms\",\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+                            \"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-text-message-size\",\n+                                \"name\": \"max.request.size\",\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-                                \"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\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"users-properties-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"message-demarcator\",\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-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                \"version\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"server\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\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+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"read-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"partition\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n+                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"required\": false,\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-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n-                                \"name\": \"success\"\n                             },\n-                            {\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"put\",\n-                            \"salesforce\",\n-                            \"sobject\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Salesforce.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"age-delay\": {\n-                                \"dependencies\": [\n+                            \"sasl.mechanism\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\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-                                \"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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-delay\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"age-field\": {\n+                            \"sasl.password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"property-based-query\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-field\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"create-zero-record-files\": {\n+                            \"sasl.token.auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n@@ -24116,1541 +27832,2087 @@\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"property-based-query\"\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"create-zero-record-files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"custom-soql-query\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"custom-where-condition\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"field-names\": {\n+                            \"sasl.username\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"property-based-query\"\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"field-names\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-age-filter\": {\n-                                \"dependencies\": [\n+                            \"security.protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLAINTEXT\",\n+                                        \"value\": \"PLAINTEXT\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"initial-age-filter\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"query-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n                                     {\n-                                        \"description\": \"Provide query by properties.\",\n-                                        \"displayName\": \"Property Based Query\",\n-                                        \"value\": \"property-based-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\n                                     },\n                                     {\n-                                        \"description\": \"Provide custom SOQL query.\",\n-                                        \"displayName\": \"Custom Query\",\n-                                        \"value\": \"custom-query\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"security.protocol\",\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+                            \"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\": \"record-writer\",\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.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sobject-name\": {\n+                            \"transactional-id-prefix\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"property-based-query\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n                                     }\n                                 ],\n-                                \"description\": \"The Salesforce sObject to be queried\",\n-                                \"displayName\": \"sObject Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sobject-name\",\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.salesforce.PutSalesforceObject\"\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-                        \"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 for which all content was sent to Kafka.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this 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+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"query\",\n-                            \"salesforce\",\n-                            \"sobject\",\n-                            \"soql\"\n+                            \"2.6\",\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Send\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-geohash-nar\",\n+            \"artifact\": \"nifi-aws-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"aws-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geohash-format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-level\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-record-path\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"latitude-record-path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"aws-credentials-provider-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"longitude-record-path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\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 to encode latitude/longitude to geohash or decode geohash to latitude/longitude\",\n-                                \"displayName\": \"Mode\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mode\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\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+                            \"communications-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\": \"record-reader\",\n+                                \"name\": \"communications-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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the record writer service to use for writing data\",\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\",\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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"routing-strategy\": {\n+                            \"region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SKIP\",\n-                                        \"value\": \"SKIP\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SPLIT\",\n-                                        \"value\": \"SPLIT\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRE\",\n-                                        \"value\": \"REQUIRE\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"The region of the cloud resources\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"routing-strategy\",\n+                                \"name\": \"region\",\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                             },\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n+                            \"schema-registry-name\": {\n+                                \"description\": \"The name of the Schema Registry\",\n+                                \"displayName\": \"Schema Registry Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-registry-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-server-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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.schemaregistry.services.SchemaReferenceReader\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"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\": \"2.0.0-M3\"\n+                                }\n                             }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceReader\",\n-                        \"typeDescription\": \"Reads Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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.schemaregistry.services.SchemaReferenceWriter\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"avro\",\n-                            \"confluent\",\n-                            \"kafka\",\n+                            \"aws\",\n+                            \"glue\",\n                             \"registry\",\n                             \"schema\"\n                         ],\n-                        \"type\": \"org.apache.nifi.confluent.schemaregistry.ConfluentEncodedSchemaReferenceWriter\",\n-                        \"typeDescription\": \"Writes Schema Identifier according to Confluent encoding as a header consisting of a byte marker and an integer represented as four bytes\",\n+                        \"type\": \"org.apache.nifi.aws.schemaregistry.AmazonGlueSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the AWS Glue Schema Registry so that those Schemas that are stored in the Glue Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Glue Schema Registry with their names.\",\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\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+                                \"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-                            \"authentication-type\": {\n+                            \"Access Key\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Access Key ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Access Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Assume Role ARN\": {\n+                                \"description\": \"The AWS Role ARN for cross account access. This is used in conjunction with Assume Role Session Name and other Assume Role properties.\",\n+                                \"displayName\": \"Assume Role ARN\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Assume Role ARN\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Assume Role Session Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS Role Session Name for cross account access. This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role Session Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Assume Role Session Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Credentials File\": {\n+                                \"description\": \"Path to a file containing AWS access key and secret key in properties file format.\",\n+                                \"displayName\": \"Credentials File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Credentials File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Secret Key\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Secret Access Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Secret Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Session Time\": {\n+                                \"defaultValue\": \"3600\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"Session time for role based session (between 900 and 3600 seconds). This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role Session Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"anonymous-credentials\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASIC\",\n-                                        \"value\": \"BASIC\"\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\": \"NONE\",\n-                                \"description\": \"HTTP Client Authentication Type for Confluent Schema Registry\",\n-                                \"displayName\": \"Authentication Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, uses Anonymous credentials\",\n+                                \"displayName\": \"Use Anonymous Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authentication-type\",\n+                                \"name\": \"anonymous-credentials\",\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+                            \"assume-role-external-id\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"External ID for cross-account access. This is used in conjunction with Assume Role ARN.\",\n+                                \"displayName\": \"Assume Role External ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-external-id\",\n+                                \"required\": false,\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+                            \"assume-role-proxy-host\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"Proxy host for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n+                                \"displayName\": \"Assume Role Proxy Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-proxy-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n+                            \"assume-role-proxy-port\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"Proxy port for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n+                                \"displayName\": \"Assume Role Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n+                                \"name\": \"assume-role-proxy-port\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"assume-role-ssl-context-service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"SSL Context Service used when connecting to the STS Endpoint.\",\n+                                \"displayName\": \"Assume Role SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context\",\n+                                \"name\": \"assume-role-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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"username\": {\n+                            \"assume-role-sts-endpoint\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n                                     }\n                                 ],\n-                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"The default AWS Security Token Service (STS) endpoint (\\\"sts.amazonaws.com\\\") works for all accounts that are not for China (Beijing) region or GovCloud. You only need to set this property to \\\"sts.cn-north-1.amazonaws.com.cn\\\" when you are requesting session credentials for services in China(Beijing) region or to \\\"sts.us-gov-west-1.amazonaws.com\\\" for GovCloud.\",\n+                                \"displayName\": \"Assume Role STS Endpoint Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"username\",\n+                                \"name\": \"assume-role-sts-endpoint\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-image-viewer-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-opentelemetry-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-opentelemetry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Address\",\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+                            \"assume-role-sts-region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS Security Token Service (STS) region\",\n+                                \"displayName\": \"Assume Role STS Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-region\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Client Authentication\": {\n+                            \"assume-role-sts-signer-override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWS4SignerType\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WANT\",\n-                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n+                                    }\n+                                ],\n+                                \"description\": \"The AWS STS library uses Signature Version 4 by default. This property allows you to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Assume Role STS Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Authentication\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-signer-override\",\n+                                \"required\": false,\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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n+                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\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+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n+                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue Capacity\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"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 the Default Credential chain, including EC2 instance profiles or roles, environment variables, default user credentials, etc.\",\n+                                \"displayName\": \"Use Default Credentials\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"default-credentials\",\n+                                \"required\": false,\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+                            \"profile-name\": {\n+                                \"description\": \"The AWS profile name for credentials from the profile configuration file.\",\n+                                \"displayName\": \"Profile Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Worker Threads\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"profile-name\",\n+                                \"required\": false,\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-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.AwsCredentialsProviderService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"OTLP\",\n-                            \"OTel\",\n-                            \"OpenTelemetry\",\n-                            \"logs\",\n-                            \"metrics\",\n-                            \"telemetry\",\n-                            \"traces\"\n+                            \"aws\",\n+                            \"credentials\",\n+                            \"provider\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hubspot-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService\",\n+                        \"typeDescription\": \"Defines credentials for Amazon Web Services processors. Uses default credentials without configuration. Default credentials support EC2 instance profile/role, default user profile, environment variables, etc. Additional options include access key / secret key pairs, credentials file, named profile, and assume role credentials.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hubspot-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"10 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\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\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"incremental-delay\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"dependencies\": [\n+                            \"encryption-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Incremental Loading\",\n-                                        \"propertyName\": \"is-incremental\"\n+                                        \"description\": \"No encryption.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use server-side, S3-managed encryption.\",\n+                                        \"displayName\": \"Server-side S3\",\n+                                        \"value\": \"SSE_S3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use server-side, KMS key to perform encryption.\",\n+                                        \"displayName\": \"Server-side KMS\",\n+                                        \"value\": \"SSE_KMS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use server-side, customer-supplied key to perform encryption.\",\n+                                        \"displayName\": \"Server-side Customer Key\",\n+                                        \"value\": \"SSE_C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use client-side, KMS key to perform encryption.\",\n+                                        \"displayName\": \"Client-side KMS\",\n+                                        \"value\": \"CSE_KMS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use client-side, customer-supplied key to perform encryption.\",\n+                                        \"displayName\": \"Client-side Customer Key\",\n+                                        \"value\": \"CSE_C\"\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+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n+                                \"displayName\": \"Encryption Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-delay\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"encryption-strategy\",\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+                            \"key-id-or-key-material\": {\n+                                \"description\": \"For None and Server-side S3: not used. For Server-side KMS and Client-side KMS: the KMS Key ID must be configured. For Server-side Customer Key and Client-side Customer Key: the Key Material must be specified in Base64 encoded form. In case of Server-side Customer Key, the key must be an AES-256 key. In case of Client-side Customer Key, it can be an AES-256, AES-192 or AES-128 key.\",\n+                                \"displayName\": \"Key ID or Key Material\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-initial-start-time\",\n+                                \"name\": \"key-id-or-key-material\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"is-incremental\": {\n+                            \"kms-region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\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\": \"is-incremental\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"object-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\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+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\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+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\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+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\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+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\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+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\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+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\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+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\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+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Get emails on CRM records.\",\n-                                        \"displayName\": \"Emails\",\n-                                        \"value\": \"/crm/v3/objects/emails\"\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Get meetings on CRM records.\",\n-                                        \"displayName\": \"Meetings\",\n-                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Get notes on CRM records.\",\n-                                        \"displayName\": \"Notes\",\n-                                        \"value\": \"/crm/v3/objects/notes\"\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Get tasks on CRM records.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"/crm/v3/objects/tasks\"\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n                                     }\n                                 ],\n-                                \"description\": \"The HubSpot Object Type requested\",\n-                                \"displayName\": \"Object Type\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The Region of the AWS Key Management Service. Only used in case of Client-side KMS.\",\n+                                \"displayName\": \"KMS Region\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"result-limit\",\n+                                \"name\": \"kms-region\",\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-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M3\"\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+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-aws-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hubspot\"\n+                            \"aws\",\n+                            \"decrypt\",\n+                            \"decryption\",\n+                            \"encrypt\",\n+                            \"encryption\",\n+                            \"key\",\n+                            \"s3\",\n+                            \"service\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-oauth2-provider-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.encryption.StandardS3EncryptionService\",\n+                        \"typeDescription\": \"Adds configurable encryption to S3 Put and S3 Fetch operations.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\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\": \"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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP Protocols\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"audience\": {\n-                                \"description\": \"Audience for the access token request defined in RFC 8693 Section 2.1\",\n-                                \"displayName\": \"Audience\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"audience\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n+                                \"required\": true,\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+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"authorization-server-url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication-strategy\": {\n+                            \"Region\": {\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\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n-                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n-                                        \"value\": \"BASIC_AUTHENTICATION\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\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\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication-strategy\",\n+                                \"name\": \"Region\",\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.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"S3\",\n+                            \"file\",\n+                            \"resource\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.service.S3FileResourceService\",\n+                        \"typeDescription\": \"Provides an Amazon Web Services (AWS) S3 file resource for other components.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 dimension name/value pairs to be added to the metric. AWS supports a maximum of 10 dimensions.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Dimension Name\",\n+                                \"value\": \"Dimension Value\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"client-id\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n                                 \"description\": \"\",\n-                                \"displayName\": \"Client ID\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"client-id\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"MetricName\": {\n+                                \"description\": \"The name of the metric\",\n+                                \"displayName\": \"Metric Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-secret\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"MetricName\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"grant-type\": {\n+                            \"Namespace\": {\n+                                \"description\": \"The namespace for the metric data for CloudWatch\",\n+                                \"displayName\": \"Namespace\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\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\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\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\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"grant-type\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"Timestamp\": {\n+                                \"description\": \"A point in time expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. If not specified, the default value is set to the time the metric data was received\",\n+                                \"displayName\": \"Timestamp\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"refresh-window\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Timestamp\",\n+                                \"required\": false,\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+                            \"Unit\": {\n+                                \"description\": \"The unit of the metric. (e.g Seconds, Bytes, Megabytes, Percent, Count,  Kilobytes/Second, Terabits/Second, Count/Second) For details see http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html\",\n+                                \"displayName\": \"Unit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"resource\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Unit\",\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+                            \"Value\": {\n+                                \"description\": \"The value for the metric. Must be a double\",\n+                                \"displayName\": \"Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scope\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Value\",\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-                                \"displayName\": \"Password\",\n+                            \"maximum\": {\n+                                \"description\": \"The maximum value of the sample set. Must be a double\",\n+                                \"displayName\": \"Maximum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"minimum\": {\n+                                \"description\": \"The minimum value of the sample set. Must be a double\",\n+                                \"displayName\": \"Minimum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"service-user-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"minimum\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-context-service\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n                                 }\n+                            },\n+                            \"sampleCount\": {\n+                                \"description\": \"The number of samples used for the statistic set. Must be a double\",\n+                                \"displayName\": \"Sample Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sampleCount\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"sum\": {\n+                                \"description\": \"The sum of values for the sample set. Must be a double\",\n+                                \"displayName\": \"Sum\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sum\",\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.oauth2.OAuth2AccessTokenProvider\",\n-                                \"version\": \"2.0.0-M3\"\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-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"access token\",\n-                            \"authorization\",\n-                            \"http\",\n-                            \"oauth2\",\n-                            \"provider\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"cloudwatch\",\n+                            \"metrics\",\n+                            \"publish\",\n+                            \"put\"\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+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.cloudwatch.PutCloudWatchMetric\",\n+                        \"typeDescription\": \"Publishes metrics to Amazon CloudWatch. Metric can be either a single value, or a StatisticSet comprised of minimum, maximum, sum and sample count.\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cdc-mysql-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cdc-mysql-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -25658,762 +29920,926 @@\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\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\": \"SSL Mode\",\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+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-db-name-pattern\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications 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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-driver-class\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-driver-locations\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"name\": \"Hash Key Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-begin-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\": \"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+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-begin-commit\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-ddl-events\": {\n+                            \"Hash Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\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+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-include-ddl-events\",\n+                                \"name\": \"Hash Key Value Type\",\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 environment properties.\",\n-                                \"displayName\": \"Initial Binlog Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-binlog-filename\",\n-                                \"required\": false,\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 environment properties.\",\n-                                \"displayName\": \"Initial Binlog Position\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-binlog-position\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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 environment properties.\",\n-                                \"displayName\": \"Initial Binlog GTID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"name\": \"Range Key Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Range Key Value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-password\": {\n-                                \"description\": \"Password to access the MySQL cluster\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"capture-change-mysql-retrieve-all-records\": {\n+                            \"Range Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\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+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-retrieve-all-records\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-server-id\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-state-update-interval\",\n+                                \"name\": \"Range Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-use-gtid\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-use-gtid\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-username\": {\n-                                \"description\": \"Username to access the MySQL cluster\",\n-                                \"displayName\": \"Username\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"events-per-flowfile-strategy\": {\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-                                    },\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+                            \"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\": \"events-per-flowfile-strategy\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"number-of-events-per-flowfile\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n+                        ],\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+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cdc\",\n-                            \"event\",\n-                            \"jdbc\",\n-                            \"mysql\",\n-                            \"sql\",\n-                            \"transaction\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Delete\",\n+                            \"DynamoDB\",\n+                            \"Remove\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                        \"typeDescription\": \"Deletes a document from DynamoDB based on hash and range key. The key can be string or number. The request requires all the primary keys for the operation (hash or hash and range key)\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\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+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\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+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-proxy-configuration-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-proxy-configuration-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"proxy-server-host\": {\n-                                \"description\": \"Proxy server hostname or ip-address.\",\n-                                \"displayName\": \"Proxy Server Host\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-host\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-server-port\": {\n-                                \"description\": \"Proxy server port number.\",\n-                                \"displayName\": \"Proxy Server Port\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-port\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-type\": {\n+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hash Key Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type.\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-type\",\n+                                \"name\": \"Hash Key Value Type\",\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+                            \"Json Document attribute\": {\n+                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n+                                \"displayName\": \"Json Document attribute\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-user-name\",\n-                                \"required\": false,\n+                                \"name\": \"Json Document attribute\",\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+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-user-password\",\n+                                \"name\": \"Range Key Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"socks-version\": {\n+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Range Key Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value Type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS4\",\n-                                        \"value\": \"SOCKS4\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS5\",\n-                                        \"value\": \"SOCKS5\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SOCKS5\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SOCKS\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Proxy Type\",\n-                                        \"propertyName\": \"proxy-type\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"description\": \"SOCKS Protocol Version\",\n-                                \"displayName\": \"SOCKS Version\",\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"socks-version\",\n+                                \"name\": \"Range Key Value 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.proxy.ProxyConfigurationService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Proxy\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"granularity\": {\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chunk\",\n-                                        \"value\": \"Chunk\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"File\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"granularity\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the evtx file\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.evtx.ParseEvtx\",\n-                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The output filename\",\n-                                \"name\": \"filename\"\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-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"dropbox-credential-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table 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: HTTP + AuthN\",\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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@@ -26421,373 +30847,662 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\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 are routed to failure relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to not found relationship if key not found in the table\",\n+                                \"name\": \"not found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dropbox\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Fetch\",\n+                            \"Get\"\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+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                        \"typeDescription\": \"Retrieves a document from DynamoDB based on hash and range key.  The key can be string or number.For any get request all the primary keys are required (hash or hash and range based on the table keys).A Json Document ('Map') attribute of the DynamoDB item is read into the content of the FlowFile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n                             },\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Batch items for each request (between 1 and 50)\": {\n+                                \"defaultValue\": \"1\",\n+                                \"description\": \"The items to be retrieved in one batch\",\n+                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\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+                            \"Character set of document\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character set of data in the document\",\n+                                \"displayName\": \"Character set of document\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character set of document\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\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+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"Hash Key Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Hash Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n+                                \"description\": \"The hash key value of the item\",\n+                                \"displayName\": \"Hash Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hash Key Value Type\": {\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\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"string\",\n+                                \"description\": \"The hash key value type of the item\",\n+                                \"displayName\": \"Hash Key Value Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hash Key Value Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Json Document attribute\": {\n+                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n+                                \"displayName\": \"Json Document attribute\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Json Document attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Name\": {\n+                                \"description\": \"The range key name of the item\",\n+                                \"displayName\": \"Range Key Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Range Key Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value\": {\n+                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Range Key Value\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Range Key Value\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Range Key Value Type\": {\n+                                \"allowableValues\": [\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\": \"\",\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\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\": \"number\",\n+                                        \"value\": \"number\"\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\": \"string\",\n+                                \"description\": \"The range key value type of the item\",\n+                                \"displayName\": \"Range Key Value Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Range Key Value Type\",\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+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\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\": \"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\": \"recursive-search\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Items hash key value\",\n+                                \"name\": \"  dynamodb.item.hash.key.value\"\n+                            },\n+                            {\n+                                \"description\": \"Items range key value\",\n+                                \"name\": \"  dynamodb.item.range.key.value\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\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\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"dropbox\",\n-                            \"storage\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Insert\",\n+                            \"Put\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n+                        \"typeDescription\": \"Puts a document from DynamoDB based on hash and range key.  The table can have either hash and range or hash key alone. Currently the keys supported are string and number and value can be json document. In case of hash and range keys both key are required for the operation. The FlowFile content must be JSON. FlowFile content is mapped to the specified Json Document attribute in the DynamoDB item.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"IO exception message on creating item\",\n+                                \"name\": \"dynamodb.item.io.error\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -26800,205 +31515,546 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"dropbox-credential-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The full name of the file to upload.\",\n-                                \"displayName\": \"Filename\",\n+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Table 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+                            \"partition-key-attribute\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ByAttribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Partition Key Strategy\",\n+                                        \"propertyName\": \"partition-key-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the FlowFile attribute that will be used as the value of the partition key when using \\\"Partition by attribute\\\" partition key strategy.\",\n+                                \"displayName\": \"Partition Key Attribute\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"partition-key-attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"partition-key-field\": {\n+                                \"description\": \"Defines the name of the partition key field in the DynamoDB table. Partition key is also known as hash key. Depending on the \\\"Partition Key Strategy\\\" the field value might come from the incoming Record or a generated one.\",\n+                                \"displayName\": \"Partition Key Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"partition-key-field\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"partition-key-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Uses the value of the Record field identified by the \\\"Partition Key Field\\\" property as partition key value.\",\n+                                        \"displayName\": \"Partition By Field\",\n+                                        \"value\": \"ByField\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses an incoming FlowFile attribute identified by \\\"Partition Key Attribute\\\" as the value of the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n+                                        \"displayName\": \"Partition By Attribute\",\n+                                        \"value\": \"ByAttribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses a generated UUID as value for the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n+                                        \"displayName\": \"Generated UUID\",\n+                                        \"value\": \"Generated\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"ByField\",\n+                                \"description\": \"Defines the strategy the processor uses to assign partition key value to the inserted Items.\",\n+                                \"displayName\": \"Partition Key Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partition-key-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: HTTP + AuthN\",\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\": \"2.0.0-M3\"\n                                 }\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"sort-key-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"ByField\",\n+                                            \"BySequence\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sort Key Strategy\",\n+                                        \"propertyName\": \"sort-key-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the name of the sort key field in the DynamoDB table. Sort key is also known as range key.\",\n+                                \"displayName\": \"Sort Key Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sort-key-field\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"sort-key-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses the value of the Record field identified by the \\\"Sort Key Field\\\" property as sort key value.\",\n+                                        \"displayName\": \"Sort By Field\",\n+                                        \"value\": \"ByField\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The processor will assign a number for every item based on the original record's position in the incoming FlowFile. This will be used as sort key value.\",\n+                                        \"displayName\": \"Generate Sequence\",\n+                                        \"value\": \"BySequence\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Defines the strategy the processor uses to assign sort key to the inserted Items.\",\n+                                \"displayName\": \"Sort Key Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sort-key-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox object.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n+                                \"name\": \"dynamodb.chunks.processed\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n+                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n+                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n+                                \"name\": \"unprocessed\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Files that could not be written to Dropbox for some reason are transferred to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to 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                         \"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+                                \"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                         \"tags\": [\n-                            \"dropbox\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Insert\",\n+                            \"Put\",\n+                            \"Record\"\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+                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\",\n+                        \"typeDescription\": \"Inserts items into DynamoDB based on record-oriented data. The record fields are mapped into DynamoDB item fields, including partition and sort keys if set. Depending on the number of records the processor might execute the insert in multiple chunks in order to overcome DynamoDB's limitation on batch writing. This might result partially processed FlowFiles in which case the FlowFile will be transferred to the \\\"unprocessed\\\" relationship with the necessary attribute to retry later without duplicating the already executed inserts.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message returned by Dropbox\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n+                                \"name\": \"dynamodb.chunks.processed\"\n                             },\n                             {\n-                                \"description\": \"The Dropbox identifier of the file\",\n-                                \"name\": \"dropbox.id\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"dropbox.size\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\n+                                \"description\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error service\",\n+                                \"name\": \"dynamodb.error.service\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error is retryable\",\n+                                \"name\": \"dynamodb.error.retryable\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error request id\",\n+                                \"name\": \"dynamodb.error.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"DynamoDB error status code\",\n+                                \"name\": \"dynamodb.error.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"IO exception message on creating item\",\n+                                \"name\": \"dynamodb.item.io.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -27011,108 +32067,370 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Amazon Kinesis Firehose Delivery Stream Name\": {\n+                                \"description\": \"The name of kinesis firehose delivery stream\",\n+                                \"displayName\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Batch Size\": {\n+                                \"defaultValue\": \"250\",\n+                                \"description\": \"Batch size for messages (1-500).\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max message buffer size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Max message buffer\",\n+                                \"displayName\": \"Max message buffer size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max message buffer size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\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+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n+                                \"description\": \"FlowFiles are routed to success 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+                                \"description\": \"FlowFiles are routed to failure relationship\",\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"byte\",\n-                            \"datagram\",\n-                            \"netflow\",\n-                            \"network\",\n-                            \"packet\",\n-                            \"v5\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"firehose\",\n+                            \"kinesis\",\n+                            \"put\",\n+                            \"stream\"\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+                        \"type\": \"org.apache.nifi.processors.aws.kinesis.firehose.PutKinesisFirehose\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis Firehose. In order to send data to firehose, the firehose delivery stream name has to be specified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n-                                \"name\": \"netflowv5.header.*\"\n+                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.message\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n-                                \"name\": \"netflowv5.record.*\"\n+                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.record.id\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-workday-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-workday-processors-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -27120,296 +32438,573 @@\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\": \"Override default KCL Configuration ConfigsBuilder properties with required values. Supports setting of values directly on the ConfigsBuilder, such as 'namespace', as well as properties on nested builders. For example, to set configsBuilder.retrievalConfig().maxListShardsRetryAttempts(value), name the property as 'retrievalConfig.maxListShardsRetryAttempts'. Only supports setting of simple property values, e.g. String, int, long and boolean. Does not allow override of KCL Configuration settings handled by non-dynamic processor properties.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"Kinesis Client Library (KCL) Configuration property name\",\n+                                \"value\": \"Value to set in the KCL Configuration property\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Web Client Service Provider\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Report URL\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\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+                            \"amazon-kinesis-stream-application-name\": {\n+                                \"description\": \"The Kinesis stream reader application name.\",\n+                                \"displayName\": \"Application Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-application-name\",\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+                            \"amazon-kinesis-stream-checkpoint-interval\": {\n+                                \"defaultValue\": \"3 secs\",\n+                                \"description\": \"Interval between Kinesis checkpoints\",\n+                                \"displayName\": \"Checkpoint Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-checkpoint-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-cloudwatch-flag\": {\n+                                \"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 report Kinesis usage metrics to CloudWatch.\",\n+                                \"displayName\": \"Report Metrics to CloudWatch\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-cloudwatch-flag\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-dynamodb-override\": {\n+                                \"description\": \"DynamoDB override to use non-AWS deployments\",\n+                                \"displayName\": \"DynamoDB Override\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"amazon-kinesis-stream-dynamodb-override\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-failover-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Kinesis Client Library failover timeout\",\n+                                \"displayName\": \"Failover Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-graceful-shutdown-timeout\": {\n+                                \"defaultValue\": \"20 secs\",\n+                                \"description\": \"Kinesis Client Library graceful shutdown timeout\",\n+                                \"displayName\": \"Graceful Shutdown Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-initial-position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.\",\n+                                        \"displayName\": \"LATEST\",\n+                                        \"value\": \"LATEST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.\",\n+                                        \"displayName\": \"TRIM_HORIZON\",\n+                                        \"value\": \"TRIM_HORIZON\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start reading from the position denoted by a specific time stamp, provided in the value Timestamp.\",\n+                                        \"displayName\": \"AT_TIMESTAMP\",\n+                                        \"value\": \"AT_TIMESTAMP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"LATEST\",\n+                                \"description\": \"Initial position to read Kinesis streams.\",\n+                                \"displayName\": \"Initial Stream Position\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-initial-position\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-position-timestamp\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AT_TIMESTAMP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Initial Stream Position\",\n+                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\n+                                    }\n+                                ],\n+                                \"description\": \"Timestamp position in stream from which to start reading Kinesis Records. Required if Initial position to read Kinesis streams. is AT_TIMESTAMP. Uses the Timestamp Format to parse value into a Date.\",\n+                                \"displayName\": \"Stream Position Timestamp\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-position-timestamp\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading received messages. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"amazon-kinesis-stream-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\": \"2.0.0-M3\"\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 to an output FlowFile.\",\n+                            \"amazon-kinesis-stream-record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record 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+                                \"name\": \"amazon-kinesis-stream-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\": \"2.0.0-M3\"\n                                 }\n+                            },\n+                            \"amazon-kinesis-stream-retry-count\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Number of times to retry a Kinesis operation (process record, checkpoint, shutdown)\",\n+                                \"displayName\": \"Retry Count\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-retry-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-retry-wait\": {\n+                                \"defaultValue\": \"1 sec\",\n+                                \"description\": \"Interval between Kinesis operation retries (process record, checkpoint, shutdown)\",\n+                                \"displayName\": \"Retry Wait\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-retry-wait\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"amazon-kinesis-stream-timestamp-format\": {\n+                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ss\",\n+                                \"description\": \"Format to use for parsing the Stream Position Timestamp into a Date and converting the Kinesis Record's Approximate Arrival Timestamp into a FlowFile attribute.\",\n+                                \"displayName\": \"Timestamp Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"amazon-kinesis-stream-timestamp-format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"kinesis-stream-name\": {\n+                                \"description\": \"The name of Kinesis Stream\",\n+                                \"displayName\": \"Amazon Kinesis Stream Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kinesis-stream-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\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 200 and 299.\",\n-                                \"name\": \"original\"\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                         \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"Kinesis Client Library is used to create a Worker thread for consumption of Kinesis Records. The Worker is initialised and started when this Processor has been triggered. It runs continually, spawning Kinesis Record Processors as required to fetch Kinesis Records. The Worker Thread (and any child Record Processor threads) are not controlled by the normal NiFi scheduler as part of the Concurrent Thread pool and are not released until this processor is stopped.\",\n+                                \"resource\": \"CPU\"\n+                            },\n+                            {\n+                                \"description\": \"Kinesis Client Library will continually poll for new Records, requesting up to a maximum number of Records/bytes per call. This can result in sustained network usage.\",\n+                                \"resource\": \"NETWORK\"\n+                            }\n+                        ],\n                         \"tags\": [\n-                            \"Workday\",\n-                            \"report\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"consume\",\n+                            \"kinesis\",\n+                            \"stream\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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.aws.kinesis.stream.ConsumeKinesisStream\",\n+                        \"typeDescription\": \"Reads data from the specified AWS Kinesis stream and outputs a FlowFile for every processed Record (raw)  or a FlowFile for a batch of processed records if a Record Reader and Record Writer are configured. At-least-once delivery of all Kinesis Records within the Stream while the processor is running. AWS Kinesis Client Library can take several seconds to initialise before starting to fetch data. Uses DynamoDB for check pointing and CloudWatch (optional) for metrics. Ensure that the credentials provided have access to DynamoDB and CloudWatch (optional) along with Kinesis.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.class\"\n+                                \"description\": \"Partition key of the (last) Kinesis Record read from the Shard\",\n+                                \"name\": \"aws.kinesis.partition.key\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.message\"\n+                                \"description\": \"Shard ID from which the Kinesis Record was read\",\n+                                \"name\": \"aws.kinesis.shard.id\"\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 unique identifier of the (last) Kinesis Record within its Shard\",\n+                                \"name\": \"aws.kinesis.sequence.number\"\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-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                                \"description\": \"Approximate arrival timestamp of the (last) Kinesis Record read from the stream\",\n+                                \"name\": \"aws.kinesis.approximate.arrival.timestamp\"\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+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer (if configured)\",\n+                                \"name\": \"mime.type\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                                \"description\": \"Number of records written to the FlowFiles by the Record Writer (if configured)\",\n+                                \"name\": \"record.count\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Record Reader or Record Writer (if configured)\",\n+                                \"name\": \"record.error.message\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-compress-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-compress-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -27422,764 +33017,1154 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Input Compression Strategy\": {\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n-                                    }\n-                                ],\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\": \"Input Compression Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Compression Level\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\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-                                    }\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Compression Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n                                     },\n                                     {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy-Hadoop\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"no compression\",\n-                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n-                                \"displayName\": \"Output Compression Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Compression Strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Filename Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n-                                        \"displayName\": \"Original\",\n-                                        \"value\": \"ORIGINAL\"\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"UPDATED\",\n-                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n-                                \"displayName\": \"Output Filename Strategy\",\n+                            \"amazon-kinesis-stream-partition-key\": {\n+                                \"defaultValue\": \"${kinesis.partition.key}\",\n+                                \"description\": \"The partition key attribute.  If it is not set, a random value is used\",\n+                                \"displayName\": \"Amazon Kinesis Stream Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"amazon-kinesis-stream-partition-key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kinesis-stream-name\": {\n+                                \"description\": \"The name of Kinesis Stream\",\n+                                \"displayName\": \"Amazon Kinesis Stream Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"kinesis-stream-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-message-buffer-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Max message buffer size in Mega-bytes\",\n+                                \"displayName\": \"Max message buffer size (MB)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Filename Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"max-message-buffer-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"message-batch-size\": {\n+                                \"defaultValue\": \"250\",\n+                                \"description\": \"Batch size for messages (1-500).\",\n+                                \"displayName\": \"Message Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-batch-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\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+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\"\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 are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\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                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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+                            \"amazon\",\n+                            \"aws\",\n+                            \"kinesis\",\n+                            \"put\",\n+                            \"stream\"\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.aws.kinesis.stream.PutKinesisStream\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis. In order to send data to Kinesis, the stream name has to be specified.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"Error message on posting message to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Error code for the message when posting to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"Sequence number for the message when posting to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.sequence.number\"\n+                            },\n+                            {\n+                                \"description\": \"Shard id of the message posted to AWS Kinesis\",\n+                                \"name\": \"aws.kinesis.shard.id\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-record-sink-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"Amazon Lambda Name\": {\n+                                \"description\": \"The Lambda Function Name\",\n+                                \"displayName\": \"Amazon Lambda Name\",\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-                                        \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-port\",\n+                                \"name\": \"Amazon Lambda Name\",\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+                            \"Amazon Lambda Qualifier (version)\": {\n+                                \"defaultValue\": \"$LATEST\",\n+                                \"description\": \"The Lambda Function Version\",\n+                                \"displayName\": \"Amazon Lambda Qualifier (version)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-ssl\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Amazon Lambda Qualifier (version)\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-starttls\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-username\",\n+                                \"name\": \"Endpoint Override URL\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"subject\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"logsink-log-level\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"logsink-log-level\",\n+                                \"name\": \"Region\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-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\": \"2.0.0-M3\"\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.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M3\"\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"log\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"lambda\",\n+                            \"put\"\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\": \"2.0.0-M3\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.lambda.PutLambda\",\n+                        \"typeDescription\": \"Sends the contents to a specified Amazon Lambda Function. The AWS credentials used for authentication must have permissions execute the Lambda function (lambda:InvokeFunction).The FlowFile content must be JSON.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Function error message in result on posting message to AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.function.error\"\n+                            },\n+                            {\n+                                \"description\": \"Status code in the result for the message when posting to AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.status.code\"\n+                            },\n+                            {\n+                                \"description\": \"Payload in the result from AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.payload\"\n+                            },\n+                            {\n+                                \"description\": \"Log in the result of the message posted to Lambda\",\n+                                \"name\": \"aws.lambda.result.log\"\n+                            },\n+                            {\n+                                \"description\": \"Exception message on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.message\"\n+                            },\n+                            {\n+                                \"description\": \"Exception cause on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.cause\"\n+                            },\n+                            {\n+                                \"description\": \"Exception error code on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"Exception request id on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.request.id\"\n+                            },\n+                            {\n+                                \"description\": \"Exception status code on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.status.code\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"hostname\": {\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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-                            \"port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"sender-threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n-                                \"displayName\": \"Sender Threads\",\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sender-threads\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n+                        ],\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\": \"2.0.0-M3\"\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this 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+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"UDP\",\n-                            \"event\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Polly\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\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\": \"The bucket name where polly output will be located.\",\n+                                \"name\": \"PollyS3OutputBucket\"\n+                            },\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"Object key of polly output.\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-asana-processors-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -28188,303 +34173,349 @@\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                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-controller-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-asana-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.controller.asana.AsanaClientProviderService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"asana-object-type\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"asana-collect-tasks\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect projects of the workspace.\",\n-                                        \"displayName\": \"Projects\",\n-                                        \"value\": \"asana-collect-projects\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect tags of the workspace.\",\n-                                        \"displayName\": \"Tags\",\n-                                        \"value\": \"asana-collect-tags\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the workspace.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"asana-collect-users\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the specified project.\",\n-                                        \"displayName\": \"Members of a Project\",\n-                                        \"value\": \"asana-collect-project-members\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect teams of the workspace.\",\n-                                        \"displayName\": \"Teams\",\n-                                        \"value\": \"asana-collect-teams\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"Collect users assigned to the specified team.\",\n-                                        \"displayName\": \"Team Members\",\n-                                        \"value\": \"asana-collect-team-members\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\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+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\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+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\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\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\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\": \"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\": \"asana-object-type\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-output-batch-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"asana-project-name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\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+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\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+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\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+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-team-members\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"description\": \"Team name. Case sensitive.\",\n-                                \"displayName\": \"Team\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-team-name\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\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+                            \"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\": \"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.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n+                            },\n+                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\"\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+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\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\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Newly collected objects are routed to this relationship.\",\n-                                \"name\": \"new\"\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                         \"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+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Polly\"\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.aws.ml.polly.StartAwsPollyJob\",\n+                        \"typeDescription\": \"Trigger a AWS Polly job. It should be followed by GetAwsPollyJobStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Global ID of the object in Asana.\",\n-                                \"name\": \"asana.gid\"\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsPollyJobStatus\",\n+                                \"name\": \"awsTaskId\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -28493,128 +34524,379 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"decryption-strategy\": {\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n-                                        \"displayName\": \"DECRYPTED\",\n-                                        \"value\": \"DECRYPTED\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n-                                        \"displayName\": \"PACKAGED\",\n-                                        \"value\": \"PACKAGED\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DECRYPTED\",\n-                                \"description\": \"Strategy for writing files to success after decryption\",\n-                                \"displayName\": \"Decryption Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"decryption-strategy\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"passphrase\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\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.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n+                            },\n+                            \"textract-type\": {\n+                                \"defaultValue\": \"${awsTextractType}\",\n+                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n+                                \"displayName\": \"Textract Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"textract-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n                             },\n                             {\n-                                \"description\": \"Decryption Failed\",\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Textract\"\n                         ],\n                         \"triggerSerially\": false,\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+                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Textract job.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Filename from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Modified Date from decrypted Literal Data\",\n-                                \"name\": \"pgp.literal.data.modified\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n-                            },\n-                            {\n-                                \"description\": \"Symmetric-Key Algorithm Identifier\",\n-                                \"name\": \"pgp.symmetric.key.algorithm.id\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -28623,184 +34905,381 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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 encryption\",\n-                                \"displayName\": \"File Encoding\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"passphrase\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"public-key-search\": {\n-                                \"dependencies\": [\n+                            \"Region\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Public Key Service\",\n-                                        \"propertyName\": \"public-key-service\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"public-key-search\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"public-key-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\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.PGPPublicKeyService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"symmetric-key-algorithm\": {\n+                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"textract-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"AES_128\"\n+                                        \"displayName\": \"Expense Analysis\",\n+                                        \"value\": \"Expense Analysis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"AES_192\"\n+                                        \"displayName\": \"Document Analysis\",\n+                                        \"value\": \"Document Analysis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"AES_256\"\n+                                        \"displayName\": \"Document Text Detection\",\n+                                        \"value\": \"Document Text Detection\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"AES_256\",\n-                                \"description\": \"Symmetric-Key Algorithm for encryption\",\n-                                \"displayName\": \"Symmetric-Key Algorithm\",\n+                                \"defaultValue\": \"Document Analysis\",\n+                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n+                                \"displayName\": \"Textract Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"symmetric-key-algorithm\",\n+                                \"name\": \"textract-type\",\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.aws.ml.textract.GetAwsTextractJobStatus\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Succeeded\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Encryption Failed\",\n-                                \"name\": \"failure\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Textract\"\n                         ],\n                         \"triggerSerially\": false,\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.aws.ml.textract.StartAwsTextractJob\",\n+                        \"typeDescription\": \"Trigger a AWS Textract job. It should be followed by GetAwsTextractJobStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"File Encoding\",\n-                                \"name\": \"pgp.file.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"Compression Algorithm\",\n-                                \"name\": \"pgp.compression.algorithm\"\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTextractJobStatus\",\n+                                \"name\": \"awsTaskId\"\n                             },\n                             {\n-                                \"description\": \"Compression Algorithm Identifier\",\n-                                \"name\": \"pgp.compression.algorithm.id\"\n+                                \"description\": \"The selected Textract type, which can be used in GetAwsTextractJobStatus\",\n+                                \"name\": \"awsTextractType\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -28809,200 +35288,374 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-encoding\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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-                            \"hash-algorithm\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"SHA256\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"SHA384\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"SHA512\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SHA512\",\n-                                \"description\": \"Hash Algorithm for signing\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-algorithm\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\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+                            \"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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"private-key-id\",\n+                                \"name\": \"awsTaskId\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for generating content signatures\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\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.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n-                            },\n-                            \"signing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Produce signed content packaged as an OpenPGP message\",\n-                                        \"displayName\": \"SIGNED\",\n-                                        \"value\": \"SIGNED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Produce detached signature based on associated content packaged according to OpenPGP encoding\",\n-                                        \"displayName\": \"DETACHED\",\n-                                        \"value\": \"DETACHED\"\n-                                    }\n-                                ],\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\": \"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+                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Content signing succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n                             },\n                             {\n-                                \"description\": \"Content signing failed\",\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Transcribe\"\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.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -29011,347 +35664,1076 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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\": \"Signature Verification Succeeded\",\n-                                \"name\": \"success\"\n                             },\n-                            {\n-                                \"description\": \"Signature Verification Failed\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Transcribe\"\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.aws.ml.transcribe.StartAwsTranscribeJob\",\n+                        \"typeDescription\": \"Trigger a AWS Transcribe job. It should be followed by GetAwsTranscribeStatus processor in order to monitor job status.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\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+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranscribeJobStatus\",\n+                                \"name\": \"awsTaskId\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                            \"TIMER_DRIVEN\": 1\n+                        },\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+                        \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"awsTaskId\": {\n+                                \"defaultValue\": \"${awsTaskId}\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"AWS Task ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"awsTaskId\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n+                        ],\n+                        \"sideEffectFree\": false,\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\": \"2.0.0-M3\"\n+                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n+                                \"name\": \"throttled\"\n+                            },\n+                            {\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\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                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\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\": \"2.0.0-M3\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Translate job.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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+                        \"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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n-                                \"required\": true,\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Region\",\n+                                \"required\": 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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\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\": \"2.0.0-M3\"\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+                            \"json-payload\": {\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"naming.factory.libraries\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\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+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\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\": \"2.0.0-M3\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"jndi\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\",\n+                        \"typeDescription\": \"Trigger a AWS Translate job. It should be followed by GetAwsTranslateJobStatus processor in order to monitor job status.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranslateJobStatus\",\n+                                \"name\": \"awsTaskId\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -29359,525 +36741,527 @@\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\": \"ENVIRONMENT\",\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Acknowledgement Mode\",\n+                                \"name\": \"AWS Credentials Provider service\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Bucket\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Communications Timeout\",\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://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createDurableConsumer-jakarta.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Durable Subscription\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Durable subscription\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"FullControl User List\": {\n+                                \"defaultValue\": \"${s3.permissions.full.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n+                                \"displayName\": \"FullControl User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Error Queue Name\",\n+                                \"name\": \"FullControl User List\",\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+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Selector\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Owner\": {\n+                                \"defaultValue\": \"${s3.owner}\",\n+                                \"description\": \"The Amazon ID to use for the object's owner\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n+                            \"Read ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n+                                \"displayName\": \"Read ACL User List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Read ACL User List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Read Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.read.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n+                                \"displayName\": \"Read Permission User List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Read Permission User List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Region\",\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+                                \"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\": \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Shared subscription\": {\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createSharedConsumer-jakarta.jms.Topic-java.lang.String-\",\n-                                \"displayName\": \"Shared Subscription\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Signer Override\",\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+                            \"Version\": {\n+                                \"description\": \"The Version of the Object to delete\",\n+                                \"displayName\": \"Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n+                                \"name\": \"Version\",\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+                            \"Write ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n+                                \"displayName\": \"Write ACL User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Write ACL User List\",\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+                            \"Write Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.write.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n+                                \"displayName\": \"Write Permission User List\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Write Permission User List\",\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-                                \"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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\n-                                \"required\": false,\n+                                \"name\": \"custom-signer-class-name\",\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+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"naming.factory.libraries\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"DIRECTORY\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"output-strategy\": {\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-                                    },\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-                                    }\n-                                ],\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\": \"output-strategy\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\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-                                    \"version\": \"2.0.0-M3\"\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 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\": 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.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n-                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\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 are routed to this Relationship after they have been successfully processed.\",\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+                                \"description\": \"If the Processor is unable to process a given FlowFile, it 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+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"message\",\n-                            \"receive\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"Delete\",\n+                            \"S3\"\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.aws.s3.DeleteS3Object\",\n+                        \"typeDescription\": \"Deletes a file from an Amazon S3 Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"The JMSReplyTo from the message header.\",\n-                                \"name\": \"jms_replyTo\"\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n                             },\n                             {\n-                                \"description\": \"The JMSDestination from the message header.\",\n-                                \"name\": \"jms_destination\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n                             },\n                             {\n-                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n-                                \"name\": \"jms.messagetype\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"Each message property is written to an attribute.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -29885,2280 +37269,2328 @@\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+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\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\": \"ENVIRONMENT\",\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+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchS3Object.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an S3 bucket\",\n+                                \"keywords\": [\n+                                    \"s3\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n                             {\n-                                \"explanation\": \"Client Library Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to RouteOnAttribute.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"If you would like to \\\"OR\\\" together all of the conditions (i.e., the file should be retrieved if any of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if any matches\\\".\\nIf you would like to \\\"AND\\\" together all of the conditions (i.e., the file should only be retrieved if all of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if all match\\\".\\n\\nFor each condition that you would like to filter on, add a new property. The name of the property should describe the condition. The value of the property should be an Expression Language expression that returns `true` if the file meets the condition or `false` if the file does not meet the condition.\\n\\nSome attributes that you may consider filtering on are:\\n- `filename` (the name of the file)\\n- `s3.length` (the number of bytes in the file)\\n- `s3.tag.<tag name>` (the value of the s3 tag with the name `tag name`)\\n- `s3.user.metadata.<key name>` (the value of the user metadata with the key named `key name`)\\n\\nFor example, to fetch only files that are at least 1 MB and have a filename ending in `.zip` we would set the following properties:\\n- \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n- \\\"At least 1 MB\\\" = \\\"${s3.length:ge(1000000)}\\\"\\n- \\\"Ends in .zip\\\" = \\\"${filename:endsWith('.zip')}\\\"\\n\\nAuto-terminate the `unmatched` Relationship.\\nConnect the `matched` Relationship to the FetchS3Object processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve only files from S3 that meet some specified criteria\",\n+                                \"keywords\": [\n+                                    \"s3\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"filter\",\n+                                    \"select\",\n+                                    \"fetch\",\n+                                    \"criteria\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Queue URL\\\" must be set to the appropriate URL for the SQS queue. It is recommended that this property be parameterized, using a value such as `#{SQS_QUEUE_URL}`.\\nThe \\\"Region\\\" property must be set to denote the SQS region that the queue resides in. It's a good idea to parameterize this property by setting it to something like `#{SQS_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' relationship is connected to EvaluateJsonPath.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Destination\\\" = \\\"flowfile-attribute\\\"\\n\\\"s3.bucket\\\" = \\\"$.Records[0].s3.bucket.name\\\"\\n\\\"filename\\\" = \\\"$.Records[0].s3.object.key\\\"\\n\\nThe 'success' relationship is connected to FetchS3Object.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the GetSQS Processor.\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve new files as they arrive in an S3 bucket\",\n+                                \"keywords\": [],\n+                                \"notes\": \"This method of retrieving files from S3 is more efficient than using ListS3 and more cost effective. It is the pattern recommended by AWS. However, it does require that the S3 bucket be configured to place notifications on an SQS queue when new files arrive. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Name\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Type\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n+                                \"name\": \"Region\",\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                             \"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+                                \"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\": \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"User Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"allow-illegal-chars-in-jms-header-names\": {\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n-                                \"required\": true,\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+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\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+                            \"Version\": {\n+                                \"description\": \"The Version of the Object to download\",\n+                                \"displayName\": \"Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Version\",\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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n-                                \"required\": false,\n+                                \"name\": \"custom-signer-class-name\",\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+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"DIRECTORY\"\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\": \"Environment variables 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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.factory.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"encryption-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.factory.initial\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.provider.url\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\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-                                \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"java.naming.security.principal\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-body-type\": {\n+                            \"requester-pays\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bytes\",\n-                                        \"value\": \"bytes\"\n+                                        \"description\": \"Indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"description\": \"Does not consent to pay requester charges for retrieving objects from the S3 bucket.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"bytes\",\n-                                \"description\": \"The type of JMS message body to construct.\",\n-                                \"displayName\": \"Message Body Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.\",\n+                                \"displayName\": \"Requester Pays\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-body-type\",\n+                                \"name\": \"requester-pays\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"description\": \"If the Processor is unable to process a given FlowFile, it 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+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Fetch\",\n+                            \"Get\",\n+                            \"S3\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                        \"typeDescription\": \"Retrieves the contents of an S3 Object and writes it to the content of a FlowFile\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that contains the file. Typically this is defined as an attribute on an incoming FlowFile, so this property is set to `${s3.bucket}`.\\nThe \\\"Object Key\\\" property denotes the fully qualified filename of the file to fetch. Typically, the FlowFile's `filename` attribute is used, so this property is set to `${filename}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{S3_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the file.\\n\",\n+                                \"description\": \"Fetch a specific file from S3\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The URL that can be used to access the S3 object\",\n+                                \"name\": \"s3.url\"\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\": \"2.0.0-M3\"\n-                                }\n+                            {\n+                                \"description\": \"The name of the S3 bucket\",\n+                                \"name\": \"s3.bucket\"\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n-                                \"name\": \"jms_deliveryMode\"\n+                                \"description\": \"The path of the file\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be a long.\",\n-                                \"name\": \"jms_expiration\"\n+                                \"description\": \"The path of the file\",\n+                                \"name\": \"absolute.path\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSPriority message header. Must be an integer.\",\n-                                \"name\": \"jms_priority\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSRedelivered message header.\",\n-                                \"name\": \"jms_redelivered\"\n+                                \"description\": \"The MD5 sum of the file\",\n+                                \"name\": \"hash.value\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSTimestamp message header. Must be a long.\",\n-                                \"name\": \"jms_timestamp\"\n+                                \"description\": \"MD5\",\n+                                \"name\": \"hash.algorithm\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSCorrelationID message header.\",\n-                                \"name\": \"jms_correlationId\"\n+                                \"description\": \"If S3 provides the content type/MIME type, this attribute will hold that file\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSType message header. Must be an integer.\",\n-                                \"name\": \"jms_type\"\n+                                \"description\": \"The ETag that can be used to see if the file has changed\",\n+                                \"name\": \"s3.etag\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSReplyTo message header. Must be an integer.\",\n-                                \"name\": \"jms_replyTo\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"This attribute becomes the JMSDestination message header. Must be an integer.\",\n-                                \"name\": \"jms_destination\"\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n                             },\n                             {\n-                                \"description\": \"All other attributes that do not start with jms_ are added as message properties.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\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+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n+                            },\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\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\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n+                                \"description\": \"If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time\",\n+                                \"name\": \"s3.expirationTime\"\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+                                \"description\": \"The ID of the rule that dictates this object's expiration time\",\n+                                \"name\": \"s3.expirationTimeRuleId\"\n+                            },\n+                            {\n+                                \"description\": \"The server side encryption algorithm of the object\",\n+                                \"name\": \"s3.sseAlgorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The version of the S3 object\",\n+                                \"name\": \"s3.version\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the encryption strategy that was used to store the S3 object (if it is encrypted)\",\n+                                \"name\": \"s3.encryptionStrategy\"\n                             }\n-                        ],\n-                        \"tags\": [\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster Max Redirects\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"Bucket\": {\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communication Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Connection String\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Index\",\n-                                \"required\": true,\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Listing Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"If not using a Record Writer, this property dictates how many S3 objects should be listed in a single batch. Once this number is reached, the FlowFiles that have been created will be transferred out of the Processor. Setting this value lower may result in lower latency by sending out the FlowFiles before the complete listing has finished. However, it can significantly reduce performance. Larger values may take more memory to store all of the information before sending the FlowFiles out. This property is ignored if using a Record Writer, as one of the main benefits of the Record Writer is being able to emit the entire listing as a single FlowFile.\",\n+                                \"displayName\": \"Listing Batch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Listing Batch Size\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Pool - Block When Exhausted\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Idle\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"Pool - Max Total\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"Signer Override\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Wait Time\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Evictable Idle Time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\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+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Idle\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"required\": true,\n+                                \"name\": \"delimiter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Borrow\": {\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\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n-                                \"displayName\": \"Pool - Test On Borrow\",\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\": \"Pool - Test On Borrow\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Create\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"et-state-cache\": {\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\": \"Whether or not connections should be tested upon creation.\",\n-                                \"displayName\": \"Pool - Test On Create\",\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\": \"Pool - Test On Create\",\n+                                \"name\": \"et-state-cache\",\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.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Pool - Test On Return\": {\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+                                        \"propertyDisplayName\": \"Entity Tracking State Cache\",\n+                                        \"propertyName\": \"et-state-cache\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Return\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test While Idle\": {\n+                            \"list-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"List Objects V1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"List Objects V2\",\n+                                        \"value\": \"2\"\n                                     }\n                                 ],\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\": \"Pool - Test While Idle\",\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+                                \"defaultValue\": \"1\",\n+                                \"description\": \"Specifies whether to use the original List Objects or the newer List Objects Version 2 endpoint.\",\n+                                \"displayName\": \"List Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"name\": \"list-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redis Mode\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A single standalone Redis instance.\",\n-                                        \"displayName\": \"Standalone\",\n-                                        \"value\": \"Standalone\"\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\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n-                                        \"displayName\": \"Sentinel\",\n-                                        \"value\": \"Sentinel\"\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\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n-                                        \"displayName\": \"Cluster\",\n-                                        \"value\": \"Cluster\"\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\": \"Standalone\",\n-                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n-                                \"displayName\": \"Redis Mode\",\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\": \"Redis Mode\",\n+                                \"name\": \"listing-strategy\",\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+                            \"max-age\": {\n+                                \"description\": \"The maximum age that an S3 object can be in order to be considered; any object older than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Maximum Object Age\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sentinel Master\",\n+                                \"name\": \"max-age\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"min-age\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The minimum age that an S3 object must be in order to be considered; any object younger than this amount of time (according to last modification date) will be ignored\",\n+                                \"displayName\": \"Minimum Object Age\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sentinel Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"min-age\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username used to authenticate to the Redis server.\",\n-                                \"displayName\": \"Username\",\n+                            \"prefix\": {\n+                                \"description\": \"The prefix used to filter the object list. Do not begin with a forward slash '/'. In most cases, it should end with a forward slash '/'.\",\n+                                \"displayName\": \"Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-redis-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"redis\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n-                        \"typeDescription\": \"A service that provides connections to Redis.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"redis-connection-pool\",\n-                                \"required\": true,\n+                                \"name\": \"record-writer\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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.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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set to use when storing record field values as strings. All fields will be converted to strings using this character set before being stored in Redis.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"charset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"data-record-path\": {\n-                                \"defaultValue\": \"/\",\n-                                \"description\": \"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 Redis instead of sending the entire incoming Record. The property defaults to the root '/' which corresponds to a 'flat' record (all fields/values at the top level of  the Record.\",\n-                                \"displayName\": \"Data Record Path\",\n+                            \"requester-pays\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Indicates that the requester consents to pay any charges associated with listing the S3 bucket.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not consent to pay requester charges for listing the S3 bucket.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with listing the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.  Note that this setting is not applicable when 'Use Versions' is 'true'.\",\n+                                \"displayName\": \"Requester Pays\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"data-record-path\",\n+                                \"name\": \"requester-pays\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-value-record-path\": {\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the hash value associated with all the record fields/values (see 'hset' in Redis documentation for more details). The RecordPath must point at exactly one field or an error will occur.\",\n-                                \"displayName\": \"Hash Value Record Path\",\n+                            \"use-versions\": {\n+                                \"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 S3 versions, if applicable.  If false, only the latest version of each object will be returned.\",\n+                                \"displayName\": \"Use Versions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-value-record-path\",\n+                                \"name\": \"use-versions\",\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+                            \"write-s3-object-tags\": {\n+                                \"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', the tags associated with the S3 object will be written as FlowFile attributes\",\n+                                \"displayName\": \"Write Object Tags\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"write-s3-object-tags\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n+                            \"write-s3-user-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\": \"false\",\n+                                \"description\": \"If set to 'True', the user defined metadata associated with the S3 object will be added to FlowFile attributes/records\",\n+                                \"displayName\": \"Write User Metadata\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n+                                \"name\": \"write-s3-user-metadata\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\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 having all Records stored in Redis will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles containing Records with processing errors 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                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"hash\",\n-                            \"put\",\n-                            \"record\",\n-                            \"redis\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"S3\",\n+                            \"list\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.redis.processor.PutRedisHashRecord\",\n-                        \"typeDescription\": \"Puts record field data into Redis using a specified hash value, which is determined by a RecordPath to a field in each record containing the hash value. The record fields and values are stored as key/value pairs associated by the hash value. NOTE: Neither the evaluated hash value nor any of the field values can be null. If the hash value is null, the FlowFile will be routed to failure. For each of the field values, if the value is null that field will be not set in Redis.\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                        \"typeDescription\": \"Retrieves a listing of objects from an S3 bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchS3Object. 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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to Redis\",\n-                                \"name\": \"redis.success.record.count\"\n+                                \"description\": \"The name of the S3 bucket\",\n+                                \"name\": \"s3.bucket\"\n+                            },\n+                            {\n+                                \"description\": \"The region of the S3 bucket\",\n+                                \"name\": \"s3.region\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The ETag that can be used to see if the file has changed\",\n+                                \"name\": \"s3.etag\"\n+                            },\n+                            {\n+                                \"description\": \"A boolean indicating if this is the latest version of the object\",\n+                                \"name\": \"s3.isLatest\"\n+                            },\n+                            {\n+                                \"description\": \"The last modified time in milliseconds since epoch in UTC time\",\n+                                \"name\": \"s3.lastModified\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the object in bytes\",\n+                                \"name\": \"s3.length\"\n+                            },\n+                            {\n+                                \"description\": \"The storage class of the object\",\n+                                \"name\": \"s3.storeClass\"\n+                            },\n+                            {\n+                                \"description\": \"The version of the object, if applicable\",\n+                                \"name\": \"s3.version\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Write Object Tags' is set to 'True', the tags associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n+                                \"name\": \"s3.tag.___\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Write User Metadata' is set to 'True', the user defined metadata associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n+                                \"name\": \"s3.user.metadata.___\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 user-defined metadata to be added to the S3 object as key/value pairs\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a User-Defined Metadata field to add to the S3 Object\",\n+                                \"value\": \"The value of a User-Defined Metadata field to add to the S3 Object\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database User\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\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+                            \"Cache Control\": {\n+                                \"description\": \"Sets the Cache-Control HTTP header indicating the caching directives of the associated object. Multiple directives are comma-separated.\",\n+                                \"displayName\": \"Cache Control\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"mongo-uri\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Cache Control\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-write-concern\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement, using the default write concern configured on the server\",\n-                                        \"displayName\": \"ACKNOWLEDGED\",\n-                                        \"value\": \"ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will return as soon as the message is written to the socket. Exceptions are raised for network issues, but not server errors\",\n-                                        \"displayName\": \"UNACKNOWLEDGED\",\n-                                        \"value\": \"UNACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deprecated.  Use of \\\"JOURNALED\\\" is preferred\",\n-                                        \"displayName\": \"FSYNCED\",\n-                                        \"value\": \"FSYNCED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations wait for the server to group commit to the journal file on disk\",\n-                                        \"displayName\": \"JOURNALED\",\n-                                        \"value\": \"JOURNALED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deprecated.  Use of \\\"W2\\\" is preferred\",\n-                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n-                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Exceptions are raised for network issues, and server errors; waits on a majority of servers for the write operation\",\n-                                        \"displayName\": \"MAJORITY\",\n-                                        \"value\": \"MAJORITY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from a single member\",\n-                                        \"displayName\": \"W1\",\n-                                        \"value\": \"W1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from two members\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from three members\",\n-                                        \"displayName\": \"W3\",\n-                                        \"value\": \"W3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-write-concern\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"Content Disposition\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"attachment\",\n+                                        \"value\": \"attachment\"\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\": \"Sets the Content-Disposition HTTP header indicating if the content is intended to be displayed inline or should be downloaded.\\n Possible values are 'inline' or 'attachment'. If this property is not specified, object's content-disposition will be set to filename. When 'attachment' is selected, '; filename=' plus object key are automatically appended to form final value 'attachment; filename=\\\"filename.jpg\\\"'.\",\n+                                \"displayName\": \"Content Disposition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-client-auth\",\n+                                \"name\": \"Content Disposition\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"Content Type\": {\n+                                \"description\": \"Sets the Content-Type HTTP header indicating the type of content stored in the associated object. The value of this header is a standard MIME type.\\nAWS S3 Java client will attempt to determine the correct content type if one hasn't been set yet. Users are responsible for ensuring a suitable content type is set when uploading streams. If no content type is provided and cannot be determined by the filename, the default content type \\\"application/octet-stream\\\" will be used.\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-collection-name\",\n-                                \"required\": true,\n+                                \"name\": \"Content Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-db-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Expiration Time Rule\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Expiration Time Rule\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-db-name\",\n-                                \"required\": true,\n+                                \"name\": \"Expiration Time Rule\",\n+                                \"required\": false,\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+                            \"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\": \"mongo-lookup-client-service\",\n+                                \"name\": \"File Resource Service\",\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.fileresource.service.api.FileResourceService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"mongo-lookup-projection\": {\n-                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n-                                \"displayName\": \"Projection\",\n+                            \"FullControl User List\": {\n+                                \"defaultValue\": \"${s3.permissions.full.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n+                                \"displayName\": \"FullControl User List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"FullControl User List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Multipart Part Size\": {\n+                                \"defaultValue\": \"5 GB\",\n+                                \"description\": \"Specifies the part size for use when the PutS3Multipart Upload API is used. Flow files will be broken into chunks of this size for the upload process, but the last part sent can be smaller since it is not padded. The valid range is 50MB to 5GB.\",\n+                                \"displayName\": \"Multipart Part Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-projection\",\n-                                \"required\": false,\n+                                \"name\": \"Multipart Part Size\",\n+                                \"required\": true,\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+                            \"Multipart Threshold\": {\n+                                \"defaultValue\": \"5 GB\",\n+                                \"description\": \"Specifies the file size threshold for switch from the PutS3Object API to the PutS3MultipartUpload API.  Flow files bigger than this limit will be sent using the stateful multipart process. The valid range is 50MB to 5GB.\",\n+                                \"displayName\": \"Multipart Threshold\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-value-field\",\n-                                \"required\": false,\n+                                \"name\": \"Multipart Threshold\",\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 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\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\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+                            \"Multipart Upload AgeOff Interval\": {\n+                                \"defaultValue\": \"60 min\",\n+                                \"description\": \"Specifies the interval at which existing multipart uploads in AWS S3 will be evaluated for ageoff.  When processor is triggered it will initiate the ageoff evaluation if this interval has been exceeded.\",\n+                                \"displayName\": \"Multipart Upload AgeOff Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"Multipart Upload AgeOff Interval\",\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+                            \"Multipart Upload Max Age Threshold\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"Specifies the maximum age for existing multipart uploads in AWS S3.  When the ageoff process occurs, any upload older than this threshold will be aborted.\",\n+                                \"displayName\": \"Multipart Upload Max Age Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Multipart Upload Max Age Threshold\",\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+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"Owner\": {\n+                                \"defaultValue\": \"${s3.owner}\",\n+                                \"description\": \"The Amazon ID to use for the object's owner\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-registry\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\n                                 \"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\": \"2.0.0-M3\"\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+                            \"Read ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n+                                \"displayName\": \"Read ACL User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n+                                \"name\": \"Read ACL User List\",\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+                            \"Read Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.read.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n+                                \"displayName\": \"Read Permission User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables 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.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"lookup\",\n-                            \"mongo\",\n-                            \"mongodb\",\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-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"name\": \"Read Permission User List\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\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\": \"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+                                \"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\": \"el-rest-output-no-hits\",\n+                                \"name\": \"Resource Transfer Source\",\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+                            \"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\": \"el-rest-pagination-keep-alive\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"el-rest-pagination-type\": {\n+                            \"Signer Override\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\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+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n+                            \"Storage Class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DeepArchive\",\n+                                        \"value\": \"DeepArchive\"\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\": \"Glacier\",\n+                                        \"value\": \"Glacier\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GlacierInstantRetrieval\",\n+                                        \"value\": \"GlacierInstantRetrieval\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IntelligentTiering\",\n+                                        \"value\": \"IntelligentTiering\"\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\": \"OneZoneInfrequentAccess\",\n+                                        \"value\": \"OneZoneInfrequentAccess\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Outposts\",\n+                                        \"value\": \"Outposts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ReducedRedundancy\",\n+                                        \"value\": \"ReducedRedundancy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Snow\",\n+                                        \"value\": \"Snow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Standard\",\n+                                        \"value\": \"Standard\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"StandardInfrequentAccess\",\n+                                        \"value\": \"StandardInfrequentAccess\"\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\": \"Standard\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Storage Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Storage Class\",\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\": \"Environment variables 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\": \"Environment variables 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+                            \"Write ACL User List\": {\n+                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n+                                \"displayName\": \"Write ACL User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n+                                \"name\": \"Write ACL User List\",\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+                            \"Write Permission User List\": {\n+                                \"defaultValue\": \"${s3.permissions.write.users}\",\n+                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n+                                \"displayName\": \"Write Permission User List\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n+                                \"name\": \"Write Permission User List\",\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+                            \"canned-acl\": {\n+                                \"defaultValue\": \"${s3.permissions.cannedacl}\",\n+                                \"description\": \"Amazon Canned ACL for an object, one of: BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead, PublicReadWrite, PublicRead, Private; will be ignored if any other ACL/permission/owner property is specified\",\n+                                \"displayName\": \"Canned ACL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n+                                \"name\": \"canned-acl\",\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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-field\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-range-format\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-format\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-initial-value\",\n+                                \"name\": \"encryption-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"es-rest-sort-order\": {\n+                            \"s3-object-remove-tags-prefix\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"asc\",\n-                                        \"value\": \"asc\"\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"desc\",\n-                                        \"value\": \"desc\"\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\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\": \"false\",\n+                                \"description\": \"If set to 'True', the value provided for 'Object Tags Prefix' will be removed from the attribute(s) and then considered as the Tag name. For ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII and the prefix is set to 'tagS3' then the corresponding tag values would be 'country' and 'PII'\",\n+                                \"displayName\": \"Remove Tag Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-sort-order\",\n-                                \"required\": true,\n+                                \"name\": \"s3-object-remove-tags-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\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\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\n-                            {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": 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-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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-                        \"multiProcessorUseCases\": [],\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+                            \"s3-object-tags-prefix\": {\n+                                \"description\": \"Specifies the prefix which would be scanned against the incoming FlowFile's attributes and the matching attribute's name and value would be considered as the outgoing S3 object's Tag name and Tag value respectively. For Ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII, the tag prefix to be specified would be 'tagS3'\",\n+                                \"displayName\": \"Object Tags Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\n+                                \"name\": \"s3-object-tags-prefix\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"s3-temporary-directory-multipart\": {\n+                                \"defaultValue\": \"${java.io.tmpdir}\",\n+                                \"description\": \"Directory in which, for multipart uploads, the processor will locally save the state tracking the upload ID and parts uploaded which must both be provided to complete the upload.\",\n+                                \"displayName\": \"Temporary Directory Multipart State\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s3-temporary-directory-multipart\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n+                            \"server-side-encryption\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"full\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES256\",\n+                                        \"value\": \"AES256\"\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+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n+                                \"displayName\": \"Server Side Encryption\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"server-side-encryption\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                            \"use-chunked-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Enables / disables chunked encoding for upload requests. Set it to false only if your endpoint does not support chunked uploading.\",\n+                                \"displayName\": \"Use Chunked Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-chunked-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"use-path-style-access\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\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\": \"false\",\n+                                \"description\": \"Path-style access can be enforced by setting this property to true. Set it to true if your endpoint does not support virtual-hosted-style requests, only path-style requests.\",\n+                                \"displayName\": \"Use Path Style Access\",\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-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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"name\": \"use-path-style-access\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the S3 object\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\"\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+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n                                 \"name\": \"failure\"\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"Put\",\n+                            \"S3\"\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+                        \"type\": \"org.apache.nifi.processors.aws.s3.PutS3Object\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as an S3 Object to an Amazon S3 Bucket.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The URL that can be used to access the S3 object\",\n+                                \"name\": \"s3.url\"\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-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                                \"description\": \"The S3 bucket where the Object was put in S3\",\n+                                \"name\": \"s3.bucket\"\n+                            },\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_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\n-                                }\n+                                \"description\": \"The S3 key within where the Object was put in S3\",\n+                                \"name\": \"s3.key\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The S3 content type of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contenttype\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The version of the S3 Object that was put to S3\",\n+                                \"name\": \"s3.version\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-attribute-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\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+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Fetched documents are routed to this relationship.\",\n-                                \"name\": \"document\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The ETag of the S3 Object\",\n+                                \"name\": \"s3.etag\"\n+                            },\n                             {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The content disposition of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contentdisposition\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"elasticsearch.index\"\n+                                \"description\": \"The cache-control header of the S3 Object\",\n+                                \"name\": \"s3.cachecontrol\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch document type\",\n-                                \"name\": \"elasticsearch.type\"\n+                                \"description\": \"The uploadId used to upload the Object to S3\",\n+                                \"name\": \"s3.uploadId\"\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\": \"A human-readable form of the expiration date of the S3 object, if one is set\",\n+                                \"name\": \"s3.expiration\"\n+                            },\n+                            {\n+                                \"description\": \"The server side encryption algorithm of the object\",\n+                                \"name\": \"s3.sseAlgorithm\"\n+                            },\n+                            {\n+                                \"description\": \"A human-readable form of the User Metadata of the S3 object, if any was set\",\n+                                \"name\": \"s3.usermetadata\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the encryption strategy, if any was set\",\n+                                \"name\": \"s3.encryptionStrategy\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32166,916 +39598,508 @@\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                         \"multiProcessorUseCases\": [],\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\": \"Environment variables 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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Bucket\": {\n+                                \"defaultValue\": \"${s3.bucket}\",\n+                                \"description\": \"The S3 Bucket to interact with\",\n+                                \"displayName\": \"Bucket\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"Bucket\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Object Key\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n+                                \"displayName\": \"Object Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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\": \"el-rest-format-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\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+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"EU (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"EU (London)\",\n+                                        \"value\": \"eu-west-2\"\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+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"EU (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"EU (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\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\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"EU (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"EU (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"EU (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"EU (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"get\",\n-                            \"json\",\n-                            \"query\",\n-                            \"read\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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-                        \"multiProcessorUseCases\": [],\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\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\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+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\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\": \"el-rest-format-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\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+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n-                                        \"displayName\": \"POINT_IN_TIME\",\n-                                        \"value\": \"pagination-pit\"\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO West\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Region\",\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\": \"Environment variables 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Signer Override\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\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+                                \"defaultValue\": \"Default Signature\",\n+                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n+                                \"displayName\": \"Signer Override\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n+                            \"append-tag\": {\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\": \"true\",\n+                                \"description\": \"If set to true, the tag will be appended to the existing set of tags on the S3 object. Any existing tags with the same key as the new tag will be updated with the specified value. If set to false, the existing tags will be removed and the new tag will be set on the S3 object.\",\n+                                \"displayName\": \"Append Tag\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"append-tag\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n+                            \"custom-signer-class-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n+                                \"displayName\": \"Custom Signer Class Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-class-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n+                                \"displayName\": \"Custom Signer Module Location\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"tag-key\": {\n+                                \"description\": \"The key of the tag that will be set on the S3 Object\",\n+                                \"displayName\": \"Tag Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\n-                                \"required\": false,\n+                                \"name\": \"tag-key\",\n+                                \"required\": true,\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+                            \"tag-value\": {\n+                                \"description\": \"The value of the tag that will be set on the S3 Object\",\n+                                \"displayName\": \"Tag Value\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"name\": \"tag-value\",\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+                            \"version\": {\n+                                \"description\": \"The Version of the Object to tag\",\n+                                \"displayName\": \"Version ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n+                                \"name\": \"version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\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.aws.s3.FetchS3Object\",\n+                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n+                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"If the Processor is unable to process a given FlowFile, it 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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"read\",\n-                            \"scroll\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Archive\",\n+                            \"S3\",\n+                            \"Tag\"\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.aws.s3.TagS3Object\",\n+                        \"typeDescription\": \"Adds or updates a tag on an Amazon S3 Object.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The tags associated with the S3 object will be written as part of the FlowFile attributes\",\n+                                \"name\": \"s3.tag.___\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\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 HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\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 S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33085,294 +40109,427 @@\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-                            {\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+                                \"description\": \"User specified dynamic Properties are added as attributes to the notification\",\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\": \"A name of an attribute to be added to the notification\",\n+                                \"value\": \"The attribute value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"ARN Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The ARN is the name of a topic\",\n+                                        \"displayName\": \"Topic ARN\",\n+                                        \"value\": \"Topic ARN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The ARN is the name of a particular Target, used to notify a specific subscriber\",\n+                                        \"displayName\": \"Target ARN\",\n+                                        \"value\": \"Target ARN\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Topic ARN\",\n+                                \"description\": \"The type of Amazon Resource Name that is being used.\",\n+                                \"displayName\": \"ARN Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"ARN Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"Amazon Resource Name (ARN)\": {\n+                                \"description\": \"The name of the resource to which notifications should be published\",\n+                                \"displayName\": \"Amazon Resource Name (ARN)\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n+                                \"name\": \"Amazon Resource Name (ARN)\",\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+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The character set in which the FlowFile's content is encoded\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"Deduplication Message ID\": {\n+                                \"description\": \"The token used for deduplication of sent messages\",\n+                                \"displayName\": \"Deduplication Message ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-dynamic_templates\",\n+                                \"name\": \"Deduplication Message ID\",\n                                 \"required\": false,\n                                 \"sensitive\": false\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+                            \"E-mail Subject\": {\n+                                \"description\": \"The optional subject to use for any subscribers that are subscribed via E-mail\",\n+                                \"displayName\": \"E-mail Subject\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-json-id-attr\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"E-mail Subject\",\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+                            \"Message Group ID\": {\n+                                \"description\": \"If using FIFO, the message group to which the flowFile belongs\",\n+                                \"displayName\": \"Message Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-script\",\n+                                \"name\": \"Message Group ID\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-json-scripted-upsert\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-scripted-upsert\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-not_found-is-error\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" 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-not_found-is-error\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-output-error-responses\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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 \\\"successful\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\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-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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-batch-size\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"put-es-record-log-error-responses\": {\n+                            \"Use JSON Structure\": {\n                                 \"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+                                \"description\": \"If true, the contents of the FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.\",\n+                                \"displayName\": \"Use JSON Structure\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"Use JSON Structure\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\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\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n-                            },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to failure 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                         \"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+                            \"amazon\",\n+                            \"aws\",\n+                            \"publish\",\n+                            \"pubsub\",\n+                            \"put\",\n+                            \"sns\",\n+                            \"topic\"\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.aws.sns.PutSNS\",\n+                        \"typeDescription\": \"Sends the content of a FlowFile as a notification to the Amazon Simple Notification Service\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33380,1184 +40537,369 @@\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-                            {\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                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-es-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\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" 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-not_found-is-error\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\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\": \"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 \\\"successful\\\" or \\\"errors\\\" relationships\",\n-                                \"displayName\": \"Output Error Responses\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\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+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-date-format\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue delete from\",\n+                                \"displayName\": \"Queue URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-time-format\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-es-record-at-timestamp-timestamp-format\",\n-                                \"required\": false,\n+                                \"name\": \"Queue URL\",\n+                                \"required\": true,\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+                            \"Receipt Handle\": {\n+                                \"defaultValue\": \"${sqs.receipt.handle}\",\n+                                \"description\": \"The identifier that specifies the receipt of the message\",\n+                                \"displayName\": \"Receipt Handle\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-batch-size\",\n+                                \"name\": \"Receipt Handle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-bulk-error-groups\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Result Record Writer\",\n-                                        \"propertyName\": \"put-es-record-error-writer\"\n-                                    }\n-                                ],\n-                                \"description\": \"The errored 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\": \"Environment variables 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\": \"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\\\" relationship.\",\n-                                \"displayName\": \"Result Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-error-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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op\",\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\": \"Environment variables 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\": \"Environment variables 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-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\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-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"put-es-record-retain-at-timestamp-field\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"ID Record Path\",\n-                                        \"propertyName\": \"put-es-record-id-path\"\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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type-record-path\",\n-                                \"required\": false,\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\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"successful\"\n-                            },\n-                            {\n-                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n-                                \"name\": \"errors\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\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\": true,\n-                        \"supportsDynamicRelationships\": 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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-aggregations\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\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+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\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\": \"el-rest-format-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\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+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\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+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\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+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\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\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\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-                                    }\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-size\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\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\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\n-                            {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": 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-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"json\",\n-                            \"page\",\n-                            \"query\",\n-                            \"scroll\",\n-                            \"search\"\n-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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-                        \"multiProcessorUseCases\": [],\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\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\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\": \"Environment variables 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+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-script\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\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+                                \"description\": \"FlowFiles are routed to success 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+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\",\n-                            \"update\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Delete\",\n+                            \"Queue\",\n+                            \"SQS\"\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.aws.sqs.DeleteSQS\",\n+                        \"typeDescription\": \"Deletes a message from an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34566,382 +40908,1307 @@\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                         \"multiProcessorUseCases\": [],\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"attribute-list\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"attributes-regex\",\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"destination\",\n+                                \"name\": \"AWS Credentials Provider service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"include-core-attributes\": {\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\": \"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+                                \"description\": \"Specifies whether the messages should be automatically deleted by the processors once they have been received.\",\n+                                \"displayName\": \"Auto Delete Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-core-attributes\",\n+                                \"name\": \"Auto Delete Messages\",\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+                            \"Batch Size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"The maximum number of messages to send in a single network request\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-schema\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"null-value\": {\n+                            \"Character Set\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Big5\",\n+                                        \"value\": \"Big5\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            {\n-                                \"description\": \"Failed to convert attributes to CSV\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                                        \"displayName\": \"Big5-HKSCS\",\n+                                        \"value\": \"Big5-HKSCS\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"CESU-8\",\n+                                        \"value\": \"CESU-8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\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-                                \"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+                                        \"displayName\": \"EUC-JP\",\n+                                        \"value\": \"EUC-JP\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"EUC-KR\",\n+                                        \"value\": \"EUC-KR\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Core Attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"JSON Handling Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"GB18030\",\n+                                        \"value\": \"GB18030\"\n+                                    },\n                                     {\n-                                        \"description\": \"Escapes JSON attribute values to strings\",\n-                                        \"displayName\": \"Escaped\",\n-                                        \"value\": \"ESCAPED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB2312\",\n+                                        \"value\": \"GB2312\"\n                                     },\n                                     {\n-                                        \"description\": \"Handles JSON attribute values as nested structured objects or arrays\",\n-                                        \"displayName\": \"Nested\",\n-                                        \"value\": \"NESTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GBK\",\n+                                        \"value\": \"GBK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM-Thai\",\n+                                        \"value\": \"IBM-Thai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM00858\",\n+                                        \"value\": \"IBM00858\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01140\",\n+                                        \"value\": \"IBM01140\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01141\",\n+                                        \"value\": \"IBM01141\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01142\",\n+                                        \"value\": \"IBM01142\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01143\",\n+                                        \"value\": \"IBM01143\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01144\",\n+                                        \"value\": \"IBM01144\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01145\",\n+                                        \"value\": \"IBM01145\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01146\",\n+                                        \"value\": \"IBM01146\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01147\",\n+                                        \"value\": \"IBM01147\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01148\",\n+                                        \"value\": \"IBM01148\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM01149\",\n+                                        \"value\": \"IBM01149\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM037\",\n+                                        \"value\": \"IBM037\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM1026\",\n+                                        \"value\": \"IBM1026\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM1047\",\n+                                        \"value\": \"IBM1047\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM273\",\n+                                        \"value\": \"IBM273\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM277\",\n+                                        \"value\": \"IBM277\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM278\",\n+                                        \"value\": \"IBM278\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM280\",\n+                                        \"value\": \"IBM280\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM284\",\n+                                        \"value\": \"IBM284\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM285\",\n+                                        \"value\": \"IBM285\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM290\",\n+                                        \"value\": \"IBM290\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM297\",\n+                                        \"value\": \"IBM297\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM420\",\n+                                        \"value\": \"IBM420\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM424\",\n+                                        \"value\": \"IBM424\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM437\",\n+                                        \"value\": \"IBM437\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM500\",\n+                                        \"value\": \"IBM500\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM775\",\n+                                        \"value\": \"IBM775\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM850\",\n+                                        \"value\": \"IBM850\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM852\",\n+                                        \"value\": \"IBM852\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM855\",\n+                                        \"value\": \"IBM855\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM857\",\n+                                        \"value\": \"IBM857\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM860\",\n+                                        \"value\": \"IBM860\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM861\",\n+                                        \"value\": \"IBM861\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM862\",\n+                                        \"value\": \"IBM862\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM863\",\n+                                        \"value\": \"IBM863\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM864\",\n+                                        \"value\": \"IBM864\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM865\",\n+                                        \"value\": \"IBM865\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM866\",\n+                                        \"value\": \"IBM866\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM868\",\n+                                        \"value\": \"IBM868\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM869\",\n+                                        \"value\": \"IBM869\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM870\",\n+                                        \"value\": \"IBM870\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM871\",\n+                                        \"value\": \"IBM871\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IBM918\",\n+                                        \"value\": \"IBM918\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-CN\",\n+                                        \"value\": \"ISO-2022-CN\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-JP\",\n+                                        \"value\": \"ISO-2022-JP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-JP-2\",\n+                                        \"value\": \"ISO-2022-JP-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-2022-KR\",\n+                                        \"value\": \"ISO-2022-KR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-13\",\n+                                        \"value\": \"ISO-8859-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-15\",\n+                                        \"value\": \"ISO-8859-15\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-16\",\n+                                        \"value\": \"ISO-8859-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-2\",\n+                                        \"value\": \"ISO-8859-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-3\",\n+                                        \"value\": \"ISO-8859-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-4\",\n+                                        \"value\": \"ISO-8859-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-5\",\n+                                        \"value\": \"ISO-8859-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-6\",\n+                                        \"value\": \"ISO-8859-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-7\",\n+                                        \"value\": \"ISO-8859-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-8\",\n+                                        \"value\": \"ISO-8859-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-9\",\n+                                        \"value\": \"ISO-8859-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JIS_X0201\",\n+                                        \"value\": \"JIS_X0201\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JIS_X0212-1990\",\n+                                        \"value\": \"JIS_X0212-1990\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KOI8-R\",\n+                                        \"value\": \"KOI8-R\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"KOI8-U\",\n+                                        \"value\": \"KOI8-U\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Shift_JIS\",\n+                                        \"value\": \"Shift_JIS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TIS-620\",\n+                                        \"value\": \"TIS-620\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32\",\n+                                        \"value\": \"UTF-32\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32BE\",\n+                                        \"value\": \"UTF-32BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-32LE\",\n+                                        \"value\": \"UTF-32LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1250\",\n+                                        \"value\": \"windows-1250\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1251\",\n+                                        \"value\": \"windows-1251\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1252\",\n+                                        \"value\": \"windows-1252\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1253\",\n+                                        \"value\": \"windows-1253\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1254\",\n+                                        \"value\": \"windows-1254\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1255\",\n+                                        \"value\": \"windows-1255\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1256\",\n+                                        \"value\": \"windows-1256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1257\",\n+                                        \"value\": \"windows-1257\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-1258\",\n+                                        \"value\": \"windows-1258\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"windows-31j\",\n+                                        \"value\": \"windows-31j\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Big5-HKSCS-2001\",\n+                                        \"value\": \"x-Big5-HKSCS-2001\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Big5-Solaris\",\n+                                        \"value\": \"x-Big5-Solaris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-euc-jp-linux\",\n+                                        \"value\": \"x-euc-jp-linux\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-EUC-TW\",\n+                                        \"value\": \"x-EUC-TW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-eucJP-Open\",\n+                                        \"value\": \"x-eucJP-Open\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1006\",\n+                                        \"value\": \"x-IBM1006\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1025\",\n+                                        \"value\": \"x-IBM1025\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1046\",\n+                                        \"value\": \"x-IBM1046\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1097\",\n+                                        \"value\": \"x-IBM1097\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1098\",\n+                                        \"value\": \"x-IBM1098\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1112\",\n+                                        \"value\": \"x-IBM1112\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1122\",\n+                                        \"value\": \"x-IBM1122\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1123\",\n+                                        \"value\": \"x-IBM1123\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1124\",\n+                                        \"value\": \"x-IBM1124\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1129\",\n+                                        \"value\": \"x-IBM1129\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1166\",\n+                                        \"value\": \"x-IBM1166\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1364\",\n+                                        \"value\": \"x-IBM1364\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1381\",\n+                                        \"value\": \"x-IBM1381\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM1383\",\n+                                        \"value\": \"x-IBM1383\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM29626C\",\n+                                        \"value\": \"x-IBM29626C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM300\",\n+                                        \"value\": \"x-IBM300\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM33722\",\n+                                        \"value\": \"x-IBM33722\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM737\",\n+                                        \"value\": \"x-IBM737\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM833\",\n+                                        \"value\": \"x-IBM833\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM834\",\n+                                        \"value\": \"x-IBM834\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM856\",\n+                                        \"value\": \"x-IBM856\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM874\",\n+                                        \"value\": \"x-IBM874\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM875\",\n+                                        \"value\": \"x-IBM875\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM921\",\n+                                        \"value\": \"x-IBM921\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM922\",\n+                                        \"value\": \"x-IBM922\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM930\",\n+                                        \"value\": \"x-IBM930\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM933\",\n+                                        \"value\": \"x-IBM933\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM935\",\n+                                        \"value\": \"x-IBM935\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM937\",\n+                                        \"value\": \"x-IBM937\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM939\",\n+                                        \"value\": \"x-IBM939\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM942\",\n+                                        \"value\": \"x-IBM942\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM942C\",\n+                                        \"value\": \"x-IBM942C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM943\",\n+                                        \"value\": \"x-IBM943\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM943C\",\n+                                        \"value\": \"x-IBM943C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM948\",\n+                                        \"value\": \"x-IBM948\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM949\",\n+                                        \"value\": \"x-IBM949\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM949C\",\n+                                        \"value\": \"x-IBM949C\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM950\",\n+                                        \"value\": \"x-IBM950\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM964\",\n+                                        \"value\": \"x-IBM964\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-IBM970\",\n+                                        \"value\": \"x-IBM970\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISCII91\",\n+                                        \"value\": \"x-ISCII91\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISO-2022-CN-CNS\",\n+                                        \"value\": \"x-ISO-2022-CN-CNS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-ISO-2022-CN-GB\",\n+                                        \"value\": \"x-ISO-2022-CN-GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-iso-8859-11\",\n+                                        \"value\": \"x-iso-8859-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-JIS0208\",\n+                                        \"value\": \"x-JIS0208\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-JISAutoDetect\",\n+                                        \"value\": \"x-JISAutoDetect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-Johab\",\n+                                        \"value\": \"x-Johab\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacArabic\",\n+                                        \"value\": \"x-MacArabic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCentralEurope\",\n+                                        \"value\": \"x-MacCentralEurope\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCroatian\",\n+                                        \"value\": \"x-MacCroatian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacCyrillic\",\n+                                        \"value\": \"x-MacCyrillic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacDingbat\",\n+                                        \"value\": \"x-MacDingbat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacGreek\",\n+                                        \"value\": \"x-MacGreek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacHebrew\",\n+                                        \"value\": \"x-MacHebrew\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacIceland\",\n+                                        \"value\": \"x-MacIceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacRoman\",\n+                                        \"value\": \"x-MacRoman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacRomania\",\n+                                        \"value\": \"x-MacRomania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacSymbol\",\n+                                        \"value\": \"x-MacSymbol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacThai\",\n+                                        \"value\": \"x-MacThai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacTurkish\",\n+                                        \"value\": \"x-MacTurkish\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MacUkraine\",\n+                                        \"value\": \"x-MacUkraine\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS932_0213\",\n+                                        \"value\": \"x-MS932_0213\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS950-HKSCS\",\n+                                        \"value\": \"x-MS950-HKSCS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-MS950-HKSCS-XP\",\n+                                        \"value\": \"x-MS950-HKSCS-XP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-mswin-936\",\n+                                        \"value\": \"x-mswin-936\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-PCK\",\n+                                        \"value\": \"x-PCK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-SJIS_0213\",\n+                                        \"value\": \"x-SJIS_0213\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-UTF-16LE-BOM\",\n+                                        \"value\": \"x-UTF-16LE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"X-UTF-32BE-BOM\",\n+                                        \"value\": \"X-UTF-32BE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"X-UTF-32LE-BOM\",\n+                                        \"value\": \"X-UTF-32LE-BOM\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-50220\",\n+                                        \"value\": \"x-windows-50220\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-50221\",\n+                                        \"value\": \"x-windows-50221\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-874\",\n+                                        \"value\": \"x-windows-874\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-949\",\n+                                        \"value\": \"x-windows-949\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-950\",\n+                                        \"value\": \"x-windows-950\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"x-windows-iso2022jp\",\n+                                        \"value\": \"x-windows-iso2022jp\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ESCAPED\",\n-                                \"description\": \"Strategy to use for handling attributes which contain nested JSON.\",\n-                                \"displayName\": \"JSON Handling Strategy\",\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The Character Set that should be used to encode the textual content of the SQS message\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Handling Strategy\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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\": \"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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pretty Print\": {\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue to get messages from\",\n+                                \"displayName\": \"Queue URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Queue URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Receive Message Wait Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"The maximum amount of time to wait on a long polling receive call. Setting this to a value of 1 second or greater will reduce the number of SQS requests and decrease fetch latency at the cost of a constantly active thread.\",\n+                                \"displayName\": \"Receive Message Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Message Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n                                     }\n                                 ],\n-                                \"description\": \"Apply pretty print formatting to the output.\",\n-                                \"displayName\": \"Pretty Print\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"attributes-to-json-regex\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Visibility Timeout\": {\n+                                \"defaultValue\": \"15 mins\",\n+                                \"description\": \"The amount of time after a message is received but not deleted that the message is hidden from 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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully converted attributes to JSON\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"json\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Fetch\",\n+                            \"Get\",\n+                            \"Poll\",\n+                            \"Queue\",\n+                            \"SQS\"\n                         ],\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+                        \"type\": \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                        \"typeDescription\": \"Fetches messages from an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"JSON representation of Attributes\",\n-                                \"name\": \"JSONAttributes\"\n+                                \"description\": \"The MD5 sum of the message\",\n+                                \"name\": \"hash.value\"\n+                            },\n+                            {\n+                                \"description\": \"MD5\",\n+                                \"name\": \"hash.algorithm\"\n+                            },\n+                            {\n+                                \"description\": \"The unique identifier of the SQS message\",\n+                                \"name\": \"sqs.message.id\"\n+                            },\n+                            {\n+                                \"description\": \"The SQS Receipt Handle that is to be used to delete the message from the queue\",\n+                                \"name\": \"sqs.receipt.handle\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34951,102 +42218,407 @@\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+                                \"description\": \"Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of the Message Attribute and value will become the value of the Message Attribute\",\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n+                                \"name\": \"The name of a Message Attribute to add to the message\",\n+                                \"value\": \"The value of the Message Attribute\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"AWS Credentials Provider service\": {\n+                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"AWS Credentials Provider service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\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+                            \"Delay\": {\n+                                \"defaultValue\": \"0 secs\",\n+                                \"description\": \"The amount of time to delay the message before it becomes available to consumers\",\n+                                \"displayName\": \"Delay\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Endpoint Override URL\": {\n+                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n+                                \"displayName\": \"Endpoint Override URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue URL\": {\n+                                \"description\": \"The URL of the queue to act upon\",\n+                                \"displayName\": \"Queue URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"record-stats-limit\",\n+                                \"name\": \"Queue URL\",\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+                            \"Region\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-1\",\n+                                        \"displayName\": \"US East (N. Virginia)\",\n+                                        \"value\": \"us-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n+                                        \"displayName\": \"US ISO East\",\n+                                        \"value\": \"us-iso-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n+                                        \"displayName\": \"US ISO WEST\",\n+                                        \"value\": \"us-iso-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n+                                        \"displayName\": \"US ISOB East (Ohio)\",\n+                                        \"value\": \"us-isob-east-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-1\",\n+                                        \"displayName\": \"US West (N. California)\",\n+                                        \"value\": \"us-west-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : us-west-2\",\n+                                        \"displayName\": \"US West (Oregon)\",\n+                                        \"value\": \"us-west-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-cn-global\",\n+                                        \"displayName\": \"aws-cn-global\",\n+                                        \"value\": \"aws-cn-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-global\",\n+                                        \"displayName\": \"aws-global\",\n+                                        \"value\": \"aws-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n+                                        \"displayName\": \"aws-iso-b-global\",\n+                                        \"value\": \"aws-iso-b-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-iso-global\",\n+                                        \"displayName\": \"aws-iso-global\",\n+                                        \"value\": \"aws-iso-global\"\n+                                    },\n+                                    {\n+                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n+                                        \"displayName\": \"aws-us-gov-global\",\n+                                        \"value\": \"aws-us-gov-global\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-stats-reader\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"deduplication-message-id\": {\n+                                \"description\": \"The token used for deduplication of sent messages\",\n+                                \"displayName\": \"Deduplication Message ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"deduplication-message-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"message-group-id\": {\n+                                \"description\": \"If using FIFO, the message group to which the FlowFile belongs\",\n+                                \"displayName\": \"Message Group ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"message-group-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a flowfile fails to be processed, it goes here.\",\n+                                \"description\": \"FlowFiles are routed to failure 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"record\",\n-                            \"stats\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"Publish\",\n+                            \"Put\",\n+                            \"Queue\",\n+                            \"SQS\"\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.aws.sqs.PutSQS\",\n+                        \"typeDescription\": \"Publishes a message to an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\n-                    },\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-asana-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35055,991 +42627,1402 @@\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Default property values are sufficient.\\nConnect the 'success' relationship to CompressContent.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.IdentifyMimeType\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" = \\\"use mime.type attribute\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.CompressContent\"\n-                                    }\n-                                ],\n-                                \"description\": \"Check whether or not a FlowFile is compressed and if so, decompress it.\",\n-                                \"keywords\": [\n-                                    \"auto\",\n-                                    \"detect\",\n-                                    \"mime type\",\n-                                    \"compress\",\n-                                    \"decompress\",\n-                                    \"gzip\",\n-                                    \"bzip2\"\n-                                ],\n-                                \"notes\": \"If IdentifyMimeType determines that the content is not compressed, CompressContent will pass the FlowFile along to the 'success' relationship without attempting to decompress it.\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Compression Format\": {\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"asana-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n+                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"asana-collect-tasks\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\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\": \"\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"description\": \"Collect projects of the workspace.\",\n+                                        \"displayName\": \"Projects\",\n+                                        \"value\": \"asana-collect-projects\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"description\": \"Collect tags of the workspace.\",\n+                                        \"displayName\": \"Tags\",\n+                                        \"value\": \"asana-collect-tags\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"description\": \"Collect users assigned to the workspace.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"asana-collect-users\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\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\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Collect teams of the workspace.\",\n+                                        \"displayName\": \"Teams\",\n+                                        \"value\": \"asana-collect-teams\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n+                                        \"description\": \"Collect users assigned to the specified team.\",\n+                                        \"displayName\": \"Team Members\",\n+                                        \"value\": \"asana-collect-team-members\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\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\": \"\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\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\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\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\": \"\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\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\": \"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\": \"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\": \"Compression Format\",\n+                                \"name\": \"asana-object-type\",\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+                            \"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+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-project-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\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\": \"Compression Format\",\n-                                        \"propertyName\": \"Compression Format\"\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                                         \"dependentValues\": [\n-                                            \"compress\"\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\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+                                \"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\": \"Compression Level\",\n-                                \"required\": true,\n+                                \"name\": \"asana-section-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"compress\",\n-                                        \"value\": \"compress\"\n-                                    },\n+                            \"asana-tag-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"decompress\",\n-                                        \"value\": \"decompress\"\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-                                \"defaultValue\": \"compress\",\n-                                \"description\": \"Indicates whether the processor should compress content or decompress content. Must be either 'compress' or 'decompress'\",\n-                                \"displayName\": \"Mode\",\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\": \"Mode\",\n-                                \"required\": true,\n+                                \"name\": \"asana-tag-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Filename\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"asana-team-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-team-members\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\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\": \"Team name. Case sensitive.\",\n+                                \"displayName\": \"Team\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Update Filename\",\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\": \"2.0.0-M3\"\n+                                }\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+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n-                                \"name\": \"success\"\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\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n+                                \"name\": \"updated\"\n+                            },\n+                            {\n+                                \"description\": \"Newly collected objects are routed to this relationship.\",\n+                                \"name\": \"new\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"decompress\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n+                            \"asana\",\n+                            \"ingest\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Mode\\\" = \\\"compress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm should be used.\",\n-                                \"description\": \"Compress the contents of a FlowFile\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm was used to compress the data previously.\",\n-                                \"description\": \"Decompress the contents of a FlowFile\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n+                        \"typeDescription\": \"This processor collects data from Asana\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Global ID of the object in Asana.\",\n+                                \"name\": \"asana.gid\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-record-sink-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Grouping Attribute\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-auth\",\n+                                \"required\": true,\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+                            \"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\": \"Maximum Data Rate\",\n-                                \"required\": false,\n+                                \"name\": \"smtp-hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum FlowFile Rate\": {\n+                            \"smtp-password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\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+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum FlowFile Rate\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Rate\": {\n+                            \"smtp-ssl\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether SSL should be enabled\",\n+                                \"displayName\": \"SMTP SSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-starttls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-username\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"data rate\",\n-                                            \"attribute value\",\n-                                            \"flowfile count\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\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+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Rate\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"smtp-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Control Criteria\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"subject\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"logsink-log-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Rate is controlled by counting bytes transferred per time duration.\",\n-                                        \"displayName\": \"data rate\",\n-                                        \"value\": \"data rate\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TRACE\",\n+                                        \"value\": \"TRACE\"\n                                     },\n                                     {\n-                                        \"description\": \"Rate is controlled by counting FlowFiles transferred per time duration\",\n-                                        \"displayName\": \"flowfile count\",\n-                                        \"value\": \"flowfile count\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEBUG\",\n+                                        \"value\": \"DEBUG\"\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\": \"INFO\",\n+                                        \"value\": \"INFO\"\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+                                        \"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\": \"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+                                \"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\": \"Rate Control Criteria\",\n+                                \"name\": \"logsink-log-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Controlled Attribute\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"attribute value\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\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+                            \"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\": \"Rate Controlled Attribute\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Rate Exceeded Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The FlowFile will be held in its input queue until the rate of data has fallen below the configured maximum and will then be allowed through.\",\n-                                        \"displayName\": \"Hold FlowFile\",\n-                                        \"value\": \"Hold FlowFile\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The FlowFile will be routed to the 'rate exceeded' Relationship.\",\n-                                        \"displayName\": \"Route to 'rate exceeded'\",\n-                                        \"value\": \"Route to 'rate exceeded'\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Hold FlowFile\",\n-                                \"description\": \"Specifies how to handle an incoming FlowFile when the maximum data rate has been exceeded.\",\n-                                \"displayName\": \"Rate Exceeded Strategy\",\n+                            \"port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"port\",\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\": \"Rate Exceeded Strategy\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sender-threads\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"Maximum Outstanding Requests\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Duration\": {\n+                            \"Request Expiration\": {\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+                                \"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\": \"Time Duration\",\n+                                \"name\": \"Request Expiration\",\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+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"rate\",\n-                            \"rate control\",\n-                            \"throttle\",\n-                            \"throughput\"\n+                            \"http\",\n+                            \"request\",\n+                            \"response\"\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `data rate`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how much data should be allowed through each second.\\n\\nFor example, to allow through 8 MB per second, set \\\"Maximum Rate\\\" to `8 MB`.\\n\",\n-                                \"description\": \"Limit the rate at which data is sent to a downstream system with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"data rate\"\n-                                ],\n-                                \"notes\": \"\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-config-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many FlowFiles should be allowed through each second.\\n\\nFor example, to allow through 100 FlowFiles per second, set \\\"Maximum Rate\\\" to `100`.\\n\",\n-                                \"description\": \"Limit the rate at which FlowFiles are sent to a downstream system with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"flowfile rate\"\n-                                ],\n-                                \"notes\": \"\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-config-json\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each second.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `100`.\\nIf more than 100 requests come in during any one second, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n-                                \"description\": \"Reject requests that exceed a specific rate with little to no bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"request rate\"\n-                                ],\n-                                \"notes\": \"\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"box-account-id\",\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\": \"2.0.0-M3\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 min`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each minute.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `6000`.\\nThis will allow through 6,000 FlowFiles per minute, which averages to 100 FlowFiles per second. However, those 6,000 FlowFiles may come all within the first couple of\\nseconds, or they may come in over a period of 60 seconds. As a result, this gives us an average rate of 100 FlowFiles per second but allows for bursts of data.\\nIf more than 6,000 requests come in during any one minute, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n-                                \"description\": \"Reject requests that exceed a specific rate, allowing for bursts\",\n-                                \"keywords\": [\n-                                    \"throttle\",\n-                                    \"limit\",\n-                                    \"slow down\",\n-                                    \"request rate\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"artifact\": \"nifi-box-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"client\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.box.controllerservices.JsonConfigBasedBoxClientService\",\n+                        \"typeDescription\": \"Provides Box client objects through which Box API calls can be used.\",\n                         \"version\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-distributed-cache-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Input Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Output Character Set\",\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\": \"2.0.0-M3\"\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-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character set\",\n-                            \"characterset\",\n-                            \"convert\",\n-                            \"text\"\n+                            \"cache\",\n+                            \"cluster\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"state\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Catalog Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\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+                            \"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\": \"JDBC Connection Pool\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type\": {\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate\",\n-                                \"displayName\": \"Statement Type\",\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\": \"Statement Type\",\n+                                \"name\": \"Eviction Strategy\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Cache Entries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"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 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+                            \"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\": \"Translate Field Names\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Unmatched Column Behavior\": {\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\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+                                \"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\": \"Unmatched Column Behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Eviction Strategy\",\n+                                \"required\": true,\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+                            \"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\": \"Unmatched Field Behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Keys\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-identifiers\": {\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\": \"2.0.0-M3\"\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+                        \"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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"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+                                \"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\": \"jts-quoted-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Count Items\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-table-identifiers\": {\n+                            \"Fingerprint Algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"CRC-64-AVRO\",\n+                                        \"value\": \"CRC-64-AVRO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\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+                                \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"jts-sql-param-attr-prefix\",\n+                                \"name\": \"Fingerprint Algorithm\",\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+                            \"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\": \"table-schema-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"Metadata Keys\",\n+                                \"required\": false,\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+                                \"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 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\": \"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-                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"flat\",\n-                            \"insert\",\n-                            \"json\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"avro\",\n+                            \"metadata\",\n+                            \"schema\"\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.avro.ExtractAvroMetadata\",\n+                        \"typeDescription\": \"Extracts metadata from the header of an Avro datafile.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n+                                \"name\": \"schema.type\"\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\": \"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 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 result of the Fingerprint Algorithm as a Hex string.\",\n+                                \"name\": \"schema.fingerprint\"\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 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-standard-nar\",\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36052,134 +44035,163 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Include Zero Record FlowFiles\": {\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+                            \"Output Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Avro's object container file format\",\n+                                        \"displayName\": \"Datafile\",\n+                                        \"value\": \"Datafile\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Bare Avro records\",\n+                                        \"displayName\": \"Bare Record\",\n+                                        \"value\": \"Bare Record\"\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Zero Record FlowFiles\",\n+                                \"name\": \"Output Strategy\",\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+                            \"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\": \"Record Reader\",\n+                                \"name\": \"Split 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\": \"2.0.0-M3\"\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Transfer Metadata\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                                \"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\": \"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\": \"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                         \"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-                            \"convert\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\"\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"The Record Reader should be configured according to the incoming data format.\\nThe Record Writer should be configured according to the desired output format.\",\n-                                \"description\": \"Convert data from one record-oriented format to another\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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 number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\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\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-geohash-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-geohash-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36192,254 +44204,235 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ajust-immediately\": {\n+                            \"geohash-format\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BASE32\",\n+                                        \"value\": \"BASE32\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LONG\",\n+                                        \"value\": \"LONG\"\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+                                \"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\": \"ajust-immediately\",\n+                                \"name\": \"geohash-format\",\n                                 \"required\": true,\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+                            \"geohash-level\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"ENCODE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\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\": \"character-encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geohash-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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"split-words-on-symbols\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geohash-record-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-character-count\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"latitude-record-path\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"longitude-record-path\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"ENCODE\",\n+                                        \"value\": \"ENCODE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"DECODE\",\n+                                        \"value\": \"DECODE\"\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+                                \"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\": \"text-character-count\",\n+                                \"name\": \"mode\",\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+                            \"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\": \"text-line-count\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\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\": \"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+                            \"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\": \"text-line-nonempty-count\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"text-word-count\": {\n+                            \"routing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SKIP\",\n+                                        \"value\": \"SKIP\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SPLIT\",\n+                                        \"value\": \"SPLIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRE\",\n+                                        \"value\": \"REQUIRE\"\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-word-count\",\n+                                \"name\": \"routing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.SplitText\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The flowfile contains the original content with one or more attributes added containing the respective counts\",\n+                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed 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\": \"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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character\",\n-                            \"count\",\n-                            \"line\",\n-                            \"text\",\n-                            \"word\"\n+                            \"geo\",\n+                            \"geohash\",\n+                            \"record\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The MIME type indicated by the record writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n-                                \"name\": \"text.character.count\"\n+                                \"description\": \"The number of records in the resulting flow file\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-evtx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-evtx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36452,1889 +44445,2116 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fail_when_empty\": {\n+                            \"granularity\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                                        \"displayName\": \"Chunk\",\n+                                        \"value\": \"Chunk\"\n                                     },\n                                     {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"File\"\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+                                \"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\": \"hash_algorithm\",\n+                                \"name\": \"granularity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The filename of the evtx file\",\n+                                \"name\": \"filename\"\n+                            }\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"description\": \"Any FlowFile that was successfully converted from evtx to XML\",\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 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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"blake2\",\n-                            \"content\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"md5\",\n-                            \"sha\"\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.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.evtx.ParseEvtx\",\n+                        \"typeDescription\": \"Parses the contents of a Windows Event Log file (evtx) and writes the resulting XML to the FlowFile\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"The output filename\",\n+                                \"name\": \"filename\"\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                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-slack-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"access-token\": {\n+                                \"description\": \"Bot OAuth Token used for authenticating and authorizing the Slack request sent by NiFi.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnScheduled Pause Time\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"api-url\": {\n+                                \"defaultValue\": \"https://slack.com/api\",\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\": \"API URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"@OnStopped Pause Time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"api-url\",\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+                            \"channel-id\": {\n+                                \"description\": \"Slack channel, private group, or IM channel to send the message to. Use Channel ID instead of the name.\",\n+                                \"displayName\": \"Channel ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnUnscheduled Pause Time\",\n+                                \"name\": \"channel-id\",\n                                 \"required\": true,\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+                            \"input-character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the records used to generate the Slack message.\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Size\",\n+                                \"name\": \"input-character-set\",\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+                            \"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\": \"CustomValidate Pause 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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"web-service-client-provider\": {\n+                                \"description\": \"Controller service to provide HTTP client for communicating with Slack API\",\n+                                \"displayName\": \"Web Service Client Provider\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"web-service-client-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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"record\",\n+                            \"sink\",\n+                            \"slack\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.slack.SlackRecordSink\",\n+                        \"typeDescription\": \"Format and send Records to a configured Channel using the Slack Post Message API. The service requires a Slack App with a Bot User configured for access to a Slack workspace. The Bot User OAuth Bearer Token is required for posting messages to Slack.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\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. It must be granted the channels:history, groups:history, im:history, or mpim:history scope, depending on the type of conversation being used.\",\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+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of messages to retrieve in a single request to Slack. The entire response will be parsed into memory, so it is important that this be kept in mind when setting this value.\",\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-                            \"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\": \"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+                            \"Channels\": {\n+                                \"description\": \"A comma-separated list of Slack Channels to Retrieve Messages From. Each element in the list may be either a Channel ID, such as C0L9VCD47, or (for public channels only) the name of a channel, prefixed with a # sign, such as #general. If any channel name is provided instead,instead of an ID, the Access Token provided must be granted the channels:read scope in order to resolve the Channel ID. See the Processor's Additional Details for information on how to find a Channel ID.\",\n+                                \"displayName\": \"Channels\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnScheduled called\",\n+                                \"name\": \"Channels\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnStopped called\": {\n+                            \"Include Message Blocks\": {\n                                 \"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+                                \"description\": \"Specifies whether or not the output JSON should include the value of the 'blocks' field for each Slack Message. This field includes information such as individual parts of a message that are formatted using rich text. This may be useful, for instance, for parsing. However, it often accounts for a significant portion of the data and as such may be set to null when it is not useful to you.\",\n+                                \"displayName\": \"Include Message Blocks\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnStopped called\",\n+                                \"name\": \"Include Message Blocks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnUnscheduled called\": {\n+                            \"Include Null 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\": \"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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not fields that have null values should be included in the output JSON. If true, any field in a Slack Message that has a null value will be included in the JSON with a value of null. If false, the key omitted from the output JSON entirely. Omitting null values results in smaller messages that are generally more efficient to process, but including the values may provide a better understanding of the format, especially for schema inference.\",\n+                                \"displayName\": \"Include Null Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fail When @OnUnscheduled called\",\n+                                \"name\": \"Include Null Fields\",\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+                            \"Reply Monitor Frequency\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp falls between now and the amount of time specified by the <Reply Monitor Window> property. This property determines how frequently those messages are polled. Setting the value to a shorter duration may result in replies to messages being captured more quickly, providing a lower latency. However, it will also result in additional resource use and could trigger Rate Limiting to occur.\",\n+                                \"displayName\": \"Reply Monitor Frequency\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Class\",\n+                                \"name\": \"Reply Monitor Frequency\",\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+                            \"Reply Monitor Window\": {\n+                                \"defaultValue\": \"7 days\",\n+                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp is between now and this amount of time in the past in order to check for any new replies. Setting this value to a larger value may result in additional resource use and may result in Rate Limiting. However, if a user replies to an old thread that was started outside of this window, the reply may not be captured.\",\n+                                \"displayName\": \"Reply Monitor Window\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"name\": \"Reply Monitor Window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Failure Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n-                                \"displayName\": \"FlowFile Failure Iterations\",\n+                            \"Resolve Usernames\": {\n+                                \"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 User IDs should be resolved to usernames. By default, Slack Messages provide the ID of the user that sends a message, such as U0123456789, but not the username, such as NiFiUser. The username may be resolved, but it may require additional calls to the Slack API and requires that the Token used be granted the users:read scope. If set to true, usernames will be resolved with a best-effort policy: if a username cannot be obtained, it will be skipped over. Also, note that when a username is obtained, the Message's <username> field is populated, and the <text> field is updated such that any mention will be output such as \\\"Hi @user\\\" instead of \\\"Hi <@U1234567>\\\".\",\n+                                \"displayName\": \"Resolve Usernames\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"name\": \"Resolve Usernames\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.slack.ListenSlack\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Maintains a mapping of Slack Channel IDs to the timestamp of the last message that was retrieved for that channel. This allows the processor to only retrieve messages that have been posted since the last time the processor was run. This state is stored in the cluster so that if the Primary Node changes, the new node will pick up where the previous node left off.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Slack messages that are successfully received will be 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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"conversation\",\n+                            \"conversation.history\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.slack.ConsumeSlack\",\n+                        \"typeDescription\": \"Retrieves messages from one or more configured Slack channels. The messages are written out in JSON format. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages from Slack.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\n                             },\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\": \"FlowFile Rollback Iterations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The number of slack messages that are included in the FlowFile\",\n+                                \"name\": \"slack.message.count\"\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+                            {\n+                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"250 millis\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n+                        \"propertyDescriptors\": {\n+                            \"App Token\": {\n+                                \"description\": \"The Application Token that is registered to your Slack application\",\n+                                \"displayName\": \"App Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Penalty Iterations\",\n+                                \"name\": \"App Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"Bot Token\": {\n+                                \"description\": \"The Bot Token that is registered to your Slack application\",\n+                                \"displayName\": \"Bot Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Rollback Yield Iterations\",\n+                                \"name\": \"Bot Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"FlowFile Success Iterations\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Number of FlowFiles to forward to success relationship.\",\n-                                \"displayName\": \"FlowFile Success Iterations\",\n+                            \"Event Type to Receive\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The Processor is to receive only slack messages that mention the bot user (App Mention Events)\",\n+                                        \"displayName\": \"Receive App Mention Events\",\n+                                        \"value\": \"Receive App Mention Events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Processor is to receive Slack Message Events\",\n+                                        \"displayName\": \"Receive Message Events\",\n+                                        \"value\": \"Receive Message Events\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The Processor is to receive Commands from Slack that are specific to your application. The Processor will not receive Message Events.\",\n+                                        \"displayName\": \"Receive Commands\",\n+                                        \"value\": \"Receive Commands\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Receive App Mention Events\",\n+                                \"description\": \"Specifies the type of Event that the Processor should respond to\",\n+                                \"displayName\": \"Event Type to Receive\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Success Iterations\",\n+                                \"name\": \"Event Type to Receive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Interrupts When Paused\": {\n+                            \"Resolve User Details\": {\n                                 \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Interrupts When Paused\",\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-                                \"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+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Receive App Mention Events\",\n+                                            \"Receive Message Events\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Type to Receive\",\n+                                        \"propertyName\": \"Event Type to Receive\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Processor should lookup details about the Slack User who sent the received message. If true, the output JSON will contain an additional field named 'userDetails'. The 'user' field will still contain the ID of the user. In order to enable this capability, the Bot Token must be granted the 'users:read' and optionally the 'users.profile:read' Bot Token Scope. If the rate limit is exceeded when retrieving this information, the received message will be rejected and must be re-delivered.\",\n+                                \"displayName\": \"Resolve User Details\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Iterations\",\n+                                \"name\": \"Resolve User Details\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.slack.ConsumeSlack\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"description\": \"All FlowFiles that are created will be sent to this Relationship.\",\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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FlowFile\",\n-                            \"debug\",\n-                            \"flow\",\n-                            \"processor\",\n-                            \"test\",\n-                            \"utility\"\n+                            \"command\",\n+                            \"event\",\n+                            \"listen\",\n+                            \"message\",\n+                            \"real-time\",\n+                            \"receive\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\"\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.slack.ListenSlack\",\n+                        \"typeDescription\": \"Retrieves real-time messages or Slack commands from one or more Slack conversations. The messages are written out in JSON format. Note that this Processor should be used to obtain real-time messages and commands from Slack and does not provide a mechanism for obtaining historical messages. The ConsumeSlack Processor should be used for an initial load of messages from a channel. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages and commands from Slack.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"defaultYieldDuration\": \"3 sec\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\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+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Set \\\"Destination\\\" to \\\"flowfile-attribute\\\"\\n\\nAdd a new property named \\\"thread.ts\\\" with a value of `$.threadTs`\\nAdd a new property named \\\"message.ts\\\" with a value of `$.ts`\\nAdd a new property named \\\"channel.id\\\" with a value of `$.channel`\\nAdd a new property named \\\"user.id\\\" with a value of `$.user`\\n\\nConnect the \\\"matched\\\" Relationship to PublishSlack.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to `${'channel.id'}`\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the response. If desired, you can reference the user of the original message by including the text `<@${'user.id'}>`.\\n    For example: `Hey, <@${'user.id'}>, thanks for asking...`\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"false\\\".\\nSet \\\"Thread Timestamp\\\" to `${'thread.ts':replaceEmpty( ${'message.ts'} )}`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.slack.PublishSlack\"\n+                                    }\n+                                ],\n+                                \"description\": \"Respond to a Slack message in a thread.\",\n+                                \"keywords\": [\n+                                    \"slack\",\n+                                    \"respond\",\n+                                    \"reply\",\n+                                    \"thread\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"bloom-filter-certainty\",\n-                                \"required\": false,\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Channel\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cache-identifier\": {\n+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"multiple\"\n+                                            \"Send FlowFile Content as Message\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish 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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"cache-identifier\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"deduplication-strategy\": {\n+                            \"Include FlowFile Content as Attachment\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Single File\",\n-                                        \"value\": \"single\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Multiple Files\",\n-                                        \"value\": \"multiple\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"deduplication-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-map-cache\": {\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"multiple\"\n+                                            \"Use 'Message Text' Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\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+                                \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Include FlowFile Content as Attachment\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"filter-capacity-hint\": {\n-                                \"defaultValue\": \"25000\",\n+                            \"Max FlowFile Size\": {\n+                                \"defaultValue\": \"1 MB\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"bloom-filter\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Filter Type\",\n-                                        \"propertyName\": \"filter-type\"\n+                                        \"propertyDisplayName\": \"Include FlowFile Content as Attachment\",\n+                                        \"propertyName\": \"Include FlowFile Content as Attachment\"\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+                                \"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\": \"filter-capacity-hint\",\n+                                \"name\": \"Max FlowFile Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Message Text\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"single\"\n+                                            \"Use 'Message Text' Property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\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\": \"The text of the message to send to Slack.\",\n+                                \"displayName\": \"Message Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-zero-record-flowfiles\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cache-identifier\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n-                                        \"propertyName\": \"distributed-map-cache\"\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-                                \"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+                                \"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\": \"put-cache-identifier\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"record-hashing-algorithm\": {\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-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The algorithm used to hash the cache key.\",\n-                                \"displayName\": \"Record Hashing Algorithm\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-hashing-algorithm\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Thread Timestamp\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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.slack.ConsumeSlack\",\n+                            \"org.apache.nifi.processors.slack.ListenSlack\"\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+                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n+                                \"name\": \"rate limited\"\n                             },\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\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+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\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                         \"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+                            \"chat.postMessage\",\n+                            \"conversation\",\n+                            \"publish\",\n+                            \"send\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n                             \"text\",\n-                            \"unique\",\n-                            \"update\"\n+                            \"unstructured\",\n+                            \"upload\",\n+                            \"write\"\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-                        \"useCases\": [],\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\\nthe 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\\na file attachment.\\n\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the Slack message.\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"true\\\" if the FlowFile's contents should be attached as a file, or \\\"false\\\" to send just the message text without an attachment.\\n\",\n+                                \"description\": \"Send specific text as a message to Slack, optionally including the FlowFile's contents as an attached file.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Send FlowFile Content as Message\\\".\\n\",\n+                                \"description\": \"Send the contents of the FlowFile as a message to Slack.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to the destination FlowFile.\",\n-                                \"name\": \"record.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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-oauth2-provider-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-oauth2-provider-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Age Off Duration\": {\n-                                \"description\": \"Time interval to age off cached FlowFiles\",\n-                                \"displayName\": \"Age Off Duration\",\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\": \"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\": \"Age Off Duration\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"audience\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"authorization-server-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache The Entry Identifier\": {\n+                            \"client-authentication-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n+                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n+                                        \"value\": \"BASIC_AUTHENTICATION\"\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+                                \"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\": \"Cache The Entry Identifier\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"client-id\",\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+                            \"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\": \"Distributed Cache Service\",\n+                                \"name\": \"client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"grant-type\": {\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+                                    },\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+                                    },\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+                                    }\n+                                ],\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\": \"grant-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: 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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FlowFile Description\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                        },\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-                                \"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+                            \"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+                                \"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+                                \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"service-user-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and 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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dedupe\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"hash\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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-                        ],\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Distribution Strategy\": {\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-                                    },\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-                                    {\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\": \"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+                            \"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\": \"Distribution Strategy\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cache-name\",\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+                            \"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\": \"Number of Relationships\",\n+                                \"name\": \"hazelcast-entry-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Where to route flowfiles for this relationship index\",\n-                                \"name\": \"1\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"distribute\",\n-                            \"load balance\",\n-                            \"round robin\",\n-                            \"route\",\n-                            \"weighted\"\n+                            \"cache\",\n+                            \"hazelcast\",\n+                            \"map\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Number of Copies\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cluster-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hazelcast-clustering-strategy\": {\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+                                    },\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+                                    }\n+                                ],\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\": \"hazelcast-clustering-strategy\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"duplicate\",\n-                            \"load\",\n-                            \"test\"\n+                            \"cache\",\n+                            \"hazelcast\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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.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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Encoded Line Length\": {\n-                                \"defaultValue\": \"76\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"base32\",\n-                                            \"base64\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MULTIPLE_LINES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Line Output Mode\",\n-                                        \"propertyName\": \"Line Output Mode\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Encode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"Each line of encoded data will contain up to the configured number of characters, rounded down to the nearest multiple of 4.\",\n-                                \"displayName\": \"Encoded Line Length\",\n+                            \"hazelcast-cluster-name\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"Name of the Hazelcast cluster.\",\n+                                \"displayName\": \"Hazelcast Cluster Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Encoded Line Length\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-cluster-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Encode or decode using Base64 set of characters\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"base64\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Encode or decode using Base32 set of characters\",\n-                                        \"displayName\": \"Base32\",\n-                                        \"value\": \"base32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Encode or decode using hexadecimal set of characters\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"hex\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Specifies the type of encoding used.\",\n-                                \"displayName\": \"Encoding\",\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\": \"Encoding\",\n+                                \"name\": \"hazelcast-connection-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Output Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The encoded content will be written as a single line.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"SINGLE_LINE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The encoded content will be written as multiple lines.\",\n-                                        \"displayName\": \"Multiple Lines\",\n-                                        \"value\": \"MULTIPLE_LINES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SINGLE_LINE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Encode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"base32\",\n-                                            \"base64\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\n-                                    }\n-                                ],\n-                                \"description\": \"Controls the line formatting for encoded content based on selected property values.\",\n-                                \"displayName\": \"Line Output Mode\",\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\": \"Line Output Mode\",\n+                                \"name\": \"hazelcast-retry-backoff-initial\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Transform original input to encoded representation\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Transform encoded input to original representation\",\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+                            \"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\": \"Mode\",\n+                                \"name\": \"hazelcast-retry-backoff-maximum\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hazelcast-server-address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\n+                        },\n+                        \"explicitRestrictions\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\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+                        \"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\": \"Environment variables 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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"base32\",\n-                            \"base64\",\n-                            \"decode\",\n-                            \"encode\",\n-                            \"hex\"\n+                            \"file\",\n+                            \"resource\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-airtable-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-airtable-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"batch-count\",\n+                                \"name\": \"api-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"group-id\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"api-url\",\n                                 \"required\": true,\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+                            \"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\": \"inactive-timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"base-id\",\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+                            \"custom-filter\": {\n+                                \"description\": \"Filter records by Airtable's formulas.\",\n+                                \"displayName\": \"Custom Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"initial-order\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-filter\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-order\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"fields\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"order-attribute\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"query-time-window-lag\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"wait-timeout\",\n+                                \"name\": \"web-client-service-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.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             }\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+                            \"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-                                \"LOCAL\"\n+                                \"CLUSTER\"\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\": \"For FlowFiles created as a result of a successful query.\",\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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"order\",\n-                            \"sort\"\n+                            \"airtable\",\n+                            \"database\",\n+                            \"query\"\n                         ],\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\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+                                \"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\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n-                                \"name\": \"EnforceOrder.detail\"\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\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n-                                \"name\": \"EnforceOrder.expectedOrder\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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+                                \"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\": \"ENVIRONMENT\",\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Destination\": {\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\": \"Environment variables 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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\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\": \"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+                                \"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\": \"Destination\",\n+                                \"name\": \"el-rest-format-aggregations\",\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+                            \"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\": \"Max String Length\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n+                            \"el-rest-output-no-hits\": {\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\": \"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\": \"Null Value Representation\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Not Found Behavior\": {\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\": \"warn\",\n-                                        \"value\": \"warn\"\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\": \"ignore\",\n-                                        \"value\": \"ignore\"\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\": \"skip\",\n-                                        \"value\": \"skip\"\n+                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. Not available for use with AWS OpenSearch.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ignore\",\n-                                \"dependencies\": [\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-split-up-aggregations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\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\": \"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\": \"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\": \"Path Not Found Behavior\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"json\",\n-                                        \"value\": \"json\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"scalar\",\n-                                        \"value\": \"scalar\"\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\": \"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\": \"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\": \"Return Type\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\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                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"JSON\",\n-                            \"JsonPath\",\n-                            \"evaluate\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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+                            \"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-                                \"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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    },\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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\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+                                \"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\": \"Destination\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-range-format\",\n+                                \"required\": false,\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+                            \"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-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\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+                                \"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\": \"Return Type\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-range-time-zone\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\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\": \"Environment variables 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\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"asc\",\n+                                        \"value\": \"asc\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"desc\",\n+                                        \"value\": \"desc\"\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\": \"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\": \"Validate DTD\",\n+                                \"name\": \"es-rest-sort-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\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\": \"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+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\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\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"systemResourceConsiderations\": [\n                             {\n-                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\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-                            \"XML\",\n-                            \"XPath\",\n-                            \"evaluate\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -38344,174 +46564,187 @@\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+                                \"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                         \"multiProcessorUseCases\": [],\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 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+                            \"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\": \"Destination\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n+                                \"required\": false,\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+                            \"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\": \"Output: Indent\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output: Method\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"xml\",\n-                                        \"value\": \"xml\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"html\",\n-                                        \"value\": \"html\"\n-                                    },\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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\": \"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\": \"Output: Method\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Omit XML Declaration\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\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\": \"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\": \"Validate DTD\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"failure\"\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\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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+                            \"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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -38521,165 +46754,185 @@\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+                                \"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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Argument Delimiter\",\n+                                \"name\": \"el-rest-client-service\",\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+                                \"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\": \"2.0.0-M3\"\n+                                }\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+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Command\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Command Arguments\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\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 'Batch Duration' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output MIME type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"get-es-attribute-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redirect Error Stream\": {\n+                            \"get-es-destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"Redirect Error Stream\",\n-                                \"required\": false,\n+                                \"name\": \"get-es-destination\",\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+                            \"get-es-id\": {\n+                                \"description\": \"The _id of the document to retrieve.\",\n+                                \"displayName\": \"Document Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Working Directory\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"get-es-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All created FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Fetched documents are routed to this relationship.\",\n+                                \"name\": \"document\"\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 flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"external\",\n-                            \"invoke\",\n-                            \"process\",\n-                            \"script\",\n-                            \"source\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Executed command\",\n-                                \"name\": \"command\"\n+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Arguments of the command\",\n-                                \"name\": \"command.arguments\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"elasticsearch.index\"\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+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"elasticsearch.type\"\n+                            },\n+                            {\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-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -38689,350 +46942,427 @@\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+                                \"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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Environment variables 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\": \"Database Connection Pooling 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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"el-rest-fetch-index\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression-format\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\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-                                    },\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\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression 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\": \"compression-format\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\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-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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-normalize\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\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\": \"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\": \"dbf-normalize\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n+                            \"el-rest-split-up-aggregations\": {\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+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\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\": \"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\": \"dbf-user-logical-types\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\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+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"esql-auto-commit\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-aggs\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n+                                \"name\": \"es-rest-query-script-fields\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"name\": \"es-rest-query-sort\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"get\",\n+                            \"json\",\n                             \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"read\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\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 name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\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 number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\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 number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\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\": \"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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39042,337 +47372,484 @@\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+                                \"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_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Environment variables 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\": \"Database Connection Pooling 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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"name\": \"el-rest-fetch-index\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-aggregations\",\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-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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\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\": \"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+                                \"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\": \"dbf-user-logical-types\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\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\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\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. Not available for use with AWS OpenSearch.\",\n+                                        \"displayName\": \"POINT_IN_TIME\",\n+                                        \"value\": \"pagination-pit\"\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\": \"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\": \"esql-auto-commit\",\n+                                \"name\": \"el-rest-pagination-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-fetch-size\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"esql-output-batch-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-normalize\": {\n+                            \"el-rest-split-up-aggregations\": {\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+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\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-                                \"displayName\": \"Normalize Table/Column Names\",\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\": \"esqlrecord-normalize\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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+                                        \"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\": \"esqlrecord-record-writer\",\n+                                \"name\": \"el-rest-split-up-hits\",\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\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-post-query\",\n+                                \"name\": \"el-rest-type\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sql-pre-query\",\n+                                \"name\": \"es-rest-query-aggs\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"Environment variables 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\": \"Environment variables 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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n+                        },\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-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": 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-                            \"database\",\n-                            \"jdbc\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n                             \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\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+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.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 name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\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 number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\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\": \"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\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\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\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39382,527 +47859,294 @@\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+                                \"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                             {\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\": \"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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Argument Delimiter\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Command Arguments\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Command Path\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore STDIN\": {\n-                                \"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+                                \"name\": \"el-rest-type\",\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+                            \"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\": \"Max Attribute Length\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-charset\",\n+                                \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Destination Attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-dynamic_templates\",\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+                            \"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\": \"Output MIME Type\",\n+                                \"name\": \"put-es-json-id-attr\",\n                                 \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Working Directory\",\n+                                \"name\": \"put-es-json-script\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"argumentsStrategy\": {\n+                            \"put-es-json-scripted-upsert\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"argumentsStrategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-scripted-upsert\",\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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 can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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+                            \"put-es-not_found-is-error\": {\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 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-                                \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" 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\": \"Grok Pattern file\",\n+                                \"name\": \"put-es-not_found-is-error\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Empty Captures\": {\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\": \"If true, then empty capture values will be included in the returned capture map.\",\n-                                \"displayName\": \"Keep Empty Captures\",\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 \\\"successful\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Empty Captures\",\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"put-es-record-batch-size\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Named captures only\": {\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\": \"Only store named captures from grok\",\n-                                \"displayName\": \"Named captures only\",\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\": \"Named captures only\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\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\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n+                            },\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-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful\"\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n+                                \"name\": \"original\"\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\": \"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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\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-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n                             \"json\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"xml\"\n+                            \"put\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n-                                \"name\": \"record.error.message\"\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-                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n-                                \"name\": \"avro.schema\"\n+                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39912,999 +48156,962 @@\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+                                \"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+                                \"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                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Character Set\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-fetch-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Canonical Equivalence\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-es-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\": \"false\",\n-                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n-                                \"displayName\": \"Enable Canonical Equivalence\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"If true, \\\"not_found\\\" Elasticsearch Document associated Records will be routed to the \\\"successful\\\" 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\": \"Enable Canonical Equivalence\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-not_found-is-error\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Case-insensitive Matching\": {\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\": \"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+                                \"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 \\\"successful\\\" or \\\"errors\\\" relationships\",\n+                                \"displayName\": \"Output Error Responses\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Case-insensitive Matching\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Enable DOTALL Mode\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-at-timestamp-path\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"put-es-record-at-timestamp-time-format\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Literal Parsing of the Pattern\": {\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\": \"false\",\n-                                \"description\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n-                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Result Record Writer\",\n+                                        \"propertyName\": \"put-es-record-error-writer\"\n+                                    }\n+                                ],\n+                                \"description\": \"The errored 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\": \"Enable Literal Parsing of the Pattern\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-bulk-error-groups\",\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+                            \"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\": \"Environment variables 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\": \"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\\\" relationship.\",\n+                                \"displayName\": \"Result Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Multiline Mode\",\n+                                \"name\": \"put-es-record-error-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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-id-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-index-op\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode-aware Case Folding\": {\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\": \"Environment variables 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\": \"Environment variables 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                                 \"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+                                \"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\": \"Enable Unicode-aware Case Folding\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Enable Unix Lines Mode\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Enable named group support\": {\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\": \"If set to true, when named groups are present in the regular expression, the name of the\\ngroup will be used in the attribute name as opposed to the group index.  All capturing groups\\nmust be named, if the number of groups (not including capture group 0) does not equal the\\nnumber of named groups validation will fail.\",\n-                                \"displayName\": \"Enable named group support\",\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\": \"Enable named group support\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-at-timestamp-field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable repeating capture group\": {\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\": \"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\": \"Enable repeating capture group\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include Capture Group 0\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"ID Record Path\",\n+                                        \"propertyName\": \"put-es-record-id-path\"\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+                                \"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\": \"Include Capture Group 0\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-retain-id-field\",\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 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-script-path\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Capture Group Length\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-scripted-upsert-path\",\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-                                    {\n-                                        \"description\": \"\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-record-type-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\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\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             },\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\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that did not result in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"successful\"\n+                            },\n+                            {\n+                                \"description\": \"Record(s)/Flowfile(s) corresponding to Elasticsearch document(s) that resulted in an \\\"error\\\" (within Elasticsearch) will be routed here.\",\n+                                \"name\": \"errors\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that are sent to Elasticsearch without request failures go to this relationship.\",\n+                                \"name\": \"original\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"Regular Expression\",\n-                            \"Text\",\n-                            \"evaluate\",\n-                            \"extract\",\n-                            \"regex\"\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.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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"Environment variables 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-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\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+                            \"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\": \"Distributed Cache 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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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-                                \"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-                            \"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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Put Cache Value In Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-fetch-index\",\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-                        \"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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"fetch\",\n-                            \"map\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{FTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{FTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchFTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFTP\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${ftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${ftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{FTP_PASSWORD}\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFTP\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a directory of an FTP Server\",\n-                                \"keywords\": [\n-                                    \"ftp\",\n-                                    \"file\",\n-                                    \"transform\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\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+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\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+                                \"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\": \"Completion Strategy\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Mode\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\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\": \"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+                                \"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\": \"Connection Timeout\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\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\": \"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+                                \"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\": \"Create Directory\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-output-no-hits\",\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+                            \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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. Not available for use with AWS OpenSearch.\",\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\": \"Internal Buffer Size\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-pagination-type\",\n+                                \"required\": true,\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+                            \"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 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n+                                \"name\": \"el-rest-query\",\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\": \"Environment variables 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+                            \"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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"el-rest-query-clause\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\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\": \"Proxy Type\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer 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\": \"Transfer Mode\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-split-up-aggregations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\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+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\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                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\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\": \"Use Compression\",\n+                                \"name\": \"el-rest-split-up-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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+                            \"es-rest-query-aggs\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\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\": \"Environment variables 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-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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\": \"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\": \"fetchfiletransfer-notfound-loglevel\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n-                                \"allowableValues\": [\n+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"Environment variables 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-                                        \"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\": \"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\": \"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\": \"ftp-use-utf8\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\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, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration 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\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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.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\": \"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\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\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\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"fetch\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"ftp.remote.host\"\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n-                                \"name\": \"ftp.remote.port\"\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n                             },\n                             {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"ftp.remote.filename\"\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n                             },\n                             {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\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\": \"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 number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\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 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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40912,315 +49119,219 @@\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\": \"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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n-                                    }\n-                                ],\n-                                \"description\": \"Ingest all files from a directory into NiFi\",\n-                                \"keywords\": [\n-                                    \"local\",\n-                                    \"files\",\n-                                    \"filesystem\",\n-                                    \"ingest\",\n-                                    \"ingress\",\n-                                    \"get\",\n-                                    \"source\",\n-                                    \"input\",\n-                                    \"fetch\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nSet the \\\"File Filter\\\" property to a Regular Expression that matches the filename (without path) of the files that you want to ingest. For example, to ingest all .jpg files, set the value to `.*\\\\.jpg`\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n-                                    }\n-                                ],\n-                                \"description\": \"Ingest specific files from a directory into NiFi, filtering on filename\",\n-                                \"keywords\": [\n-                                    \"local\",\n-                                    \"files\",\n-                                    \"filesystem\",\n-                                    \"ingest\",\n-                                    \"ingress\",\n-                                    \"get\",\n-                                    \"source\",\n-                                    \"input\",\n-                                    \"fetch\",\n-                                    \"filter\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"multiProcessorUseCases\": [],\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-                                    {\n-                                        \"description\": \"Deletes the original file from the file 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 file system once it has been pulled into NiFi\",\n-                                \"displayName\": \"Completion Strategy\",\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\": \"Environment variables 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\": \"Completion Strategy\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"File to Fetch\",\n+                                \"name\": \"el-rest-fetch-index\",\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+                            \"el-rest-query\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\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\": \"Environment variables 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\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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\": \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when file not found\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when permission denied\": {\n+                            \"el-rest-query-definition-style\": {\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+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ERROR\",\n-                                \"description\": \"Log level to use in case user exceptionfactory does not have sufficient permissions to read the file\",\n-                                \"displayName\": \"Log level when permission denied\",\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\": \"Log level when permission denied\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Conflict 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-                                    },\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+                            \"el-rest-script\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Move Conflict Strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-script\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n+                                \"name\": \"el-rest-type\",\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                         \"supportedRelationships\": [\n                             {\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\": \"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+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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 the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent 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\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-enrich-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41230,565 +49341,466 @@\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{SFTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{SFTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchSFTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListSFTP\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${sftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${sftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{SFTP_PASSWORD}\\\"\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchSFTP\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a directory of an SFTP Server\",\n-                                \"keywords\": [\n-                                    \"sftp\",\n-                                    \"secure\",\n-                                    \"file\",\n-                                    \"transform\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"multiProcessorUseCases\": [],\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+                            \"Geo Database File\": {\n+                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n+                                \"displayName\": \"MaxMind Database File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"IP Address Attribute\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                            \"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+                                \"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\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.geo.lookup.micros\"\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+                                \"description\": \"The city identified for the IP address\",\n+                                \"name\": \"X.geo.city\"\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+                                \"description\": \"The accuracy radius if provided by the database (in Kilometers)\",\n+                                \"name\": \"X.geo.accuracy\"\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+                                \"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+                            },\n+                            {\n+                                \"description\": \"The postal code for the country identified\",\n+                                \"name\": \"X.geo.postalcode\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Host Key File\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Geo Database File\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Log Level\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-city-record-path\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n+                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"geo-enrich-ip-country-record-path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"geo-enrich-ip-ip-record-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n+                                \"name\": \"geo-enrich-ip-latitude-record-path\",\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+                            \"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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"geo-enrich-ip-longitude-record-path\",\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+                            \"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\": \"Proxy Type\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\n+                                \"name\": \"geo-enrich-ip-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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"geo-enrich-ip-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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Strict Host Key Checking\": {\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\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\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\": \"Strict Host Key Checking\",\n+                                \"name\": \"geo-enrich-ip-split-found-not-found\",\n                                 \"required\": true,\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                             },\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+                            {\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"IP Address Attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Log Level\",\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\": \"2.0.0-M3\"\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\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\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+                                \"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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"ISP\",\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"maxmind\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n-                                \"name\": \"sftp.remote.port\"\n+                                \"description\": \"The number of microseconds that the geo lookup took\",\n+                                \"name\": \"X.isp.lookup.micros\"\n                             },\n                             {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"sftp.remote.filename\"\n+                                \"description\": \"The Autonomous System Number (ASN) identified for the IP address\",\n+                                \"name\": \"X.isp.asn\"\n                             },\n                             {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The Organization Associated with the ASN identified\",\n+                                \"name\": \"X.isp.asn.organization\"\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 ISP associated with the IP address provided\",\n+                                \"name\": \"X.isp.name\"\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 Organization associated with the IP address provided\",\n+                                \"name\": \"X.isp.organization\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41801,149 +49813,147 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Attribute Matching Strategy\",\n+                                \"name\": \"DNS_QUERY_TYPE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filter Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n-                                        \"displayName\": \"Retain\",\n-                                        \"value\": \"Retain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"Remove\"\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+                            \"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\": \"Filter Mode\",\n+                                \"name\": \"DNS_RETRIES\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes\",\n+                                \"name\": \"QUERY_INPUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filtered Attributes Pattern\": {\n-                                \"dependencies\": [\n+                            \"QUERY_PARSER\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use regular expression\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Attribute Matching Strategy\",\n-                                        \"propertyName\": \"Attribute Matching Strategy\"\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-                                \"description\": \"A regular expression to match names of attributes to filter from FlowFiles.\",\n-                                \"displayName\": \"Filtered Attributes Pattern\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"The method used to slice the results into attribute groups\",\n+                                \"displayName\": \"Results Parser\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes Pattern\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"All successful FlowFiles are 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\": \"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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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+                            \"dns\",\n+                            \"enrich\",\n+                            \"ip\"\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Retain\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Use regular expression\\\".\\nSpecify the \\\"Filtered Attributes Pattern\\\", e.g. \\\"my-property|a-prefix[.].*\\\".\\n\",\n-                                \"description\": \"Retain all FlowFile attributes matching a regular expression\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Remove\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Enumerate attributes\\\".\\nSpecify the set of \\\"Filtered Attributes\\\" using the delimiter comma ',', e.g. \\\"my-property,other,filename\\\".\\n\",\n-                                \"description\": \"Remove only a specified set of FlowFile attributes\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\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-                        \"version\": \"2.0.0-M3\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-enrich-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41956,242 +49966,433 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"flatten-json-character-set\",\n+                                \"name\": \"BATCH_SIZE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-json-pretty-print-json\": {\n+                            \"BULK_PROTOCOL\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Queries are made without any particular dialect\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\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\": \"flatten-json-pretty-print-json\",\n+                                \"name\": \"BULK_PROTOCOL\",\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+                            \"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\": \"flatten-json-return-type\",\n-                                \"required\": true,\n+                                \"name\": \"KEY_GROUP\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"flatten-json-separator\",\n-                                \"required\": false,\n+                                \"name\": \"QUERY_INPUT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"flatten-mode\": {\n+                            \"QUERY_PARSER\": {\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+                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"Split\"\n                                     },\n                                     {\n-                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n-                                        \"displayName\": \"dot notation\",\n-                                        \"value\": \"dot notation\"\n+                                        \"description\": \"Use a regular expression to split the results into attributes \",\n+                                        \"displayName\": \"RegEx\",\n+                                        \"value\": \"RegEx\"\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+                                        \"description\": \"Do not split results\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"keep arrays\",\n-                                \"description\": \"Specifies how json should be flattened/unflattened\",\n-                                \"displayName\": \"Flatten Mode\",\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\": \"flatten-mode\",\n+                                \"name\": \"QUERY_PARSER\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-reserved-characters\": {\n-                                \"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, reserved characters in keys will be ignored\",\n-                                \"displayName\": \"Ignore Reserved Characters\",\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\": \"ignore-reserved-characters\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"WHOIS_QUERY_TYPE\",\n+                                \"required\": false,\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                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully flattened/unflattened files go 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\": \"Files that cannot be flattened/unflattened go 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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"flatten\",\n-                            \"json\",\n-                            \"unflatten\"\n+                            \"enrich\",\n+                            \"ip\",\n+                            \"whois\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-protobuf-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-protobuf-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\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+                        \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proto Directory\": {\n+                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n+                                \"displayName\": \"Proto Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proto Directory\",\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 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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n+                                        \"displayName\": \"Schema Reference Reader\",\n+                                        \"value\": \"schema-reference-reader\"\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\": \"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+                                \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-reference-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n+                                \"displayName\": \"Schema Reference Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-registry\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\",\n+                                            \"schema-name\"\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"fork\",\n-                            \"join\",\n+                            \"parser\",\n+                            \"protobuf\",\n+                            \"reader\",\n                             \"record\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n-                                \"name\": \"enrichment.role\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n+                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-server-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cipher-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42199,328 +50400,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-                        \"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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fork-mode\": {\n+                            \"cipher-algorithm-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generated records will be the elements of the array\",\n-                                        \"displayName\": \"Extract\",\n-                                        \"value\": \"extract\"\n+                                        \"description\": \"Cipher Blocking Chaining Mode\",\n+                                        \"displayName\": \"CBC\",\n+                                        \"value\": \"CBC\"\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+                                        \"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\": \"split\",\n-                                \"description\": \"Specifies the forking mode of the processor\",\n-                                \"displayName\": \"Mode\",\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\": \"fork-mode\",\n+                                \"name\": \"cipher-algorithm-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-parent-fields\": {\n+                            \"cipher-algorithm-padding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"NoPadding\",\n+                                        \"displayName\": \"NoPadding\",\n+                                        \"value\": \"NoPadding\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"PKCS5Padding\",\n+                                        \"displayName\": \"PKCS5Padding\",\n+                                        \"value\": \"PKCS5Padding\"\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\": \"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\": \"include-parent-fields\",\n+                                \"name\": \"cipher-algorithm-padding\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"key-specification\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"key-specification-format\",\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\": \"2.0.0-M3\"\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-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"Decryption succeeded\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n-                                \"name\": \"fork\"\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"array\",\n-                            \"content\",\n-                            \"event\",\n-                            \"fork\",\n-                            \"record\",\n-                            \"stream\"\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.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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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\": \"ENVIRONMENT\",\n-                                \"name\": \"Generated FlowFile attribute name\",\n-                                \"value\": \"Generated FlowFile attribute value\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n+                            \"Private Key Identities\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Specifies whether the data should be Text or Binary\",\n-                                \"displayName\": \"Data Format\",\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\": \"Data Format\",\n+                                \"name\": \"Private Key Identities\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\"\n+                                    ]\n+                                },\n+                                \"sensitive\": true\n                             },\n-                            \"File Size\": {\n-                                \"defaultValue\": \"0B\",\n-                                \"description\": \"The size of the file that will be used\",\n-                                \"displayName\": \"File Size\",\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\": \"File Size\",\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-                            \"Unique FlowFiles\": {\n+                            \"Private Key Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unique FlowFiles\",\n-                                \"required\": true,\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+                                \"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\": \"character-set\",\n+                                \"name\": \"Private Key Source\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"generate-ff-custom-text\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mime-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n+                                \"description\": \"Decryption Completed\",\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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"generate\",\n-                            \"load\",\n-                            \"random\",\n-                            \"test\"\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.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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42528,150 +50680,217 @@\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"null-percentage\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n+                            \"encryption-scheme\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Nullable Fields\",\n-                                        \"propertyName\": \"nullable-fields\"\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\": \"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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"null-percentage\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"encryption-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"nullable-fields\": {\n+                            \"key-derivation-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\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\": \"\",\n-                                        \"displayName\": \"false\",\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\": \"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\": \"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\": \"nullable-fields\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"number-of-records\",\n+                                \"name\": \"key-derivation-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-                                \"displayName\": \"Record Writer\",\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\": \"record-writer\",\n+                                \"name\": \"password\",\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\": \"2.0.0-M3\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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\": \"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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fake\",\n-                            \"generate\",\n-                            \"random\",\n-                            \"test\"\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.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+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentCompatibility\",\n+                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"Password-Based Encryption Scheme\",\n+                                \"name\": \"pbe.scheme\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\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-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42679,294 +50898,157 @@\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                         \"multiProcessorUseCases\": [],\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\": \"Environment variables 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-                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-db-type\": {\n+                            \"File Encoding\": {\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\": \"Binary encoding\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"ASCII Armor encoding\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\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\": \"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\": \"db-fetch-db-type\",\n+                                \"name\": \"File Encoding\",\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\": \"Environment variables 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\": \"Environment variables 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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-custom-orderby-column\",\n-                                \"required\": 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                             },\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+                            \"Public Key Recipients\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-fetch-partition-size\",\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-                            \"gen-table-output-flowfile-on-zero-results\": {\n+                            \"Public Key Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\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+                                \"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\": \"gen-table-output-flowfile-on-zero-results\",\n+                                \"name\": \"Public Key Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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.cipher.DecryptContentAge\"\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\": \"Encryption Completed\",\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\": \"Encryption 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"fetch\",\n-                            \"generate\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\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 Environment/System properties.\\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42975,498 +51057,671 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\n+                            \"mac-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"displayName\": \"HmacSHA256\",\n+                                        \"value\": \"HmacSHA256\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n+                                        \"displayName\": \"HmacSHA512\",\n+                                        \"value\": \"HmacSHA512\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\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\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"name\": \"mac-algorithm\",\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+                            \"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\": \"Environment variables 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+                                    },\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\": \"Connection Timeout\",\n+                                \"name\": \"message-authentication-code-encoding\",\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+                            \"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\": \"Data Timeout\",\n+                                \"name\": \"secret-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Delete Original\": {\n+                            \"secret-key-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"UTF8\",\n+                                        \"value\": \"UTF8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\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\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Secret Key\",\n+                                \"displayName\": \"Secret Key Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delete Original\",\n+                                \"name\": \"secret-key-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Signature Verification Succeeded\",\n+                                \"name\": \"success\"\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+                            {\n+                                \"description\": \"Signature Verification 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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Authentication\",\n+                            \"HMAC\",\n+                            \"MAC\",\n+                            \"Signing\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n+                                \"name\": \"mac.calculated\"\n+                            },\n+                            {\n+                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n+                                \"name\": \"mac.encoding\"\n+                            },\n+                            {\n+                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n+                                \"name\": \"mac.algorithm\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-apicurio-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-apicurio-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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\": \"File Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"Cache Expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\n+                            \"Cache Size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry. The cache size must be a non-negative integer. When it is set to 0, the cache is effectively disabled.\",\n+                                \"displayName\": \"Cache Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cache Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\n+                            \"Schema Group ID\": {\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"The artifact Group ID for the schemas\",\n+                                \"displayName\": \"Schema Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Schema Group ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"Schema Registry URL\": {\n+                                \"description\": \"The URL of the Schema Registry e.g. http://localhost:8080\",\n+                                \"displayName\": \"Schema Registry URL\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Registry URL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\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\": \"2.0.0-M3\"\n+                                }\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\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"apicurio\",\n+                            \"avro\",\n+                            \"registry\",\n+                            \"schema\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.apicurio.schemaregistry.ApicurioSchemaRegistry\",\n+                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Apicurio Schema Registry so that those Schemas that are stored in the Apicurio Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Apicurio Schema Registry with their artifact identifiers.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-amqp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"AMQP Version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\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\": \"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\": \"Ignore Dotted Files\",\n+                                \"name\": \"AMQP Version\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Brokers\",\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+                            \"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\": \"Max Selects\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Host Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password for the user account\",\n+                                \"description\": \"Password used for authentication and authorization.\",\n                                 \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter Regex\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\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+                            \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Queue\",\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+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\n+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"Virtual Host\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"auto.acknowledge\": {\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\": \" 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\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"auto.acknowledge\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch.size\",\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-                                \"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+                            \"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\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\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\": \"Search Recursively\",\n-                                \"required\": true,\n+                                \"name\": \"cert-authentication\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"header.format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\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\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\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\": \"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\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\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\": \"Transfer Mode\",\n-                                \"required\": false,\n+                                \"name\": \"header.format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Natural Ordering\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"header.key.prefix\": {\n+                                \"defaultValue\": \"consume.amqp\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"FlowFile Attributes\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Header Output Format\",\n+                                        \"propertyName\": \"header.format\"\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\": \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"header.key.prefix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"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+                                \"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\": \"follow-symlink\",\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-                            \"ftp-use-utf8\": {\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\": \"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\": \"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\": \"ftp-use-utf8\",\n-                                \"required\": true,\n+                                \"name\": \"remove.curly.braces\",\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, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"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\": \"2.0.0-M3\"\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\": \"All FlowFiles that are received from the AMQP queue 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"fetch\",\n-                            \"files\",\n+                            \"amqp\",\n+                            \"consume\",\n                             \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"message\",\n+                            \"rabbit\",\n+                            \"receive\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The App ID field from the AMQP Message\",\n+                                \"name\": \"amqp$appId\"\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+                                \"description\": \"The Content Encoding reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentEncoding\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The Content Type reported by the AMQP Message\",\n+                                \"name\": \"amqp$contentType\"\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\": \"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\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\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 group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The numeric indicator for the Message's Delivery Mode\",\n+                                \"name\": \"amqp$deliveryMode\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The Message priority\",\n+                                \"name\": \"amqp$priority\"\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 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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-amqp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -43474,273 +51729,284 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                            \"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-                            \"Ignore Hidden Files\": {\n+                            \"AMQP Version\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"0.9.1\",\n+                                        \"value\": \"0.9.1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\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\": \"Ignore Hidden Files\",\n+                                \"name\": \"AMQP Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which to pull files\",\n-                                \"displayName\": \"Input Directory\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Directory\",\n-                                \"required\": true,\n+                                \"name\": \"Brokers\",\n+                                \"required\": false,\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\": \"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+                            \"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\": \"Keep Source File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Exchange Name\",\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+                            \"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\": \"Maximum File Age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Host 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+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\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+                            \"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\": \"Minimum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Routing Key\",\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+                            \"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\": \"Path Filter\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"User Name\",\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+                            \"Virtual Host\": {\n+                                \"description\": \"Virtual Host name which segregates AMQP system for enhanced security.\",\n+                                \"displayName\": \"Virtual Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Virtual Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\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\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\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\": \"Recurse Subdirectories\",\n-                                \"required\": true,\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-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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\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                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All files are routed to success\",\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                         \"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-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"amqp\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"rabbit\",\n+                            \"send\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The group owner of the file. May not work on all file systems\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\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\": \"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+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mqtt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -43753,561 +52019,466 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n+                                \"name\": \"Broker URI\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Client ID\",\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+                            \"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\": \"Data Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Delete Original\",\n-                                \"required\": true,\n+                                \"name\": \"Group ID\",\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+                            \"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\": \"File Filter Regex\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\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+                            \"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\": \"Host Key File\",\n+                                \"name\": \"Last Will Message\",\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will QoS Level\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"Max Selects\",\n+                                \"name\": \"Last Will Retain\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables 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+                            \"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\": \"Polling Interval\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Last Will Topic\",\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\": \"Environment variables 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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\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\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\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\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"MQTT Specification Version\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Queue Size\",\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+                            \"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\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Search Recursively\": {\n+                            \"Quality of Service(QoS)\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\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\": \"Search Recursively\",\n+                                \"name\": \"Quality of Service(QoS)\",\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+                            \"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\": \"Send Keep Alive On Timeout\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"false\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\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\": \"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\": \"Strict Host Key Checking\",\n-                                \"required\": true,\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\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-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\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\": \"Use Compression\",\n+                                \"name\": \"Session state\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Topic Filter\": {\n+                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n+                                \"displayName\": \"Topic Filter\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Natural Ordering\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Topic Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Username\": {\n-                                \"description\": \"Username\",\n+                                \"description\": \"Username to use when connecting to the broker\",\n                                 \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\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-                                \"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+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n+                                \"name\": \"add-attributes-as-fields\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\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\": \"The MQTT message output\",\n+                                \"name\": \"Message\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\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.standard.GetSFTP\",\n-                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"type\": \"org.apache.nifi.processors.mqtt.ConsumeMQTT\",\n+                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"MQTT broker that was the message source\",\n+                                \"name\": \"mqtt.broker\"\n                             },\n                             {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n+                                \"description\": \"MQTT topic on which message was received\",\n+                                \"name\": \"mqtt.topic\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n+                                \"description\": \"The quality of service for this message.\",\n+                                \"name\": \"mqtt.qos\"\n                             },\n                             {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\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\": \"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\": \"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-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44316,512 +52487,396 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Additional HTTP Methods\",\n+                                \"name\": \"Connection Timeout (seconds)\",\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+                            \"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\": \"Allow DELETE\",\n-                                \"required\": true,\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"Allow HTTP GET Method\",\n-                                \"displayName\": \"Allow GET\",\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\": \"Allow GET\",\n-                                \"required\": true,\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow HEAD\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"Allow HTTP HEAD Method\",\n-                                \"displayName\": \"Allow HEAD\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Allow HEAD\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow OPTIONS\": {\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-                                \"description\": \"Allow HTTP OPTIONS Method\",\n-                                \"displayName\": \"Allow OPTIONS\",\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\": \"Allow OPTIONS\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow POST\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Last Will Topic\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP POST Method\",\n-                                \"displayName\": \"Allow POST\",\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\": \"Allow POST\",\n+                                \"name\": \"Last Will Topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow PUT\": {\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\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP PUT Method\",\n-                                \"displayName\": \"Allow PUT\",\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\": \"Allow PUT\",\n+                                \"name\": \"MQTT Specification Version\",\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+                            \"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\": \"Allowed Paths\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"Client Authentication\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quality of Service(QoS)\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Default URL Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Retain Message\",\n                                 \"required\": true,\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+                            \"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\": \"HTTP Context Map\",\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.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"HTTP Protocols\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n-                                    },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n+                                        \"dependentValues\": [\n+                                            \"false\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HTTP_1_1\",\n-                                \"dependencies\": [\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\": \"Session Expiry Interval\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Session state\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\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\": \"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-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\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\": \"HTTP Protocols\",\n+                                \"name\": \"Session state\",\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+                            \"Topic\": {\n+                                \"description\": \"The topic to publish the message to.\",\n+                                \"displayName\": \"Topic\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Topic\",\n+                                \"required\": true,\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+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Listening Port\",\n-                                \"required\": true,\n+                                \"name\": \"Username\",\n+                                \"required\": false,\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+                            \"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\": \"Maximum Threads\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"message-demarcator\",\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 HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context 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\": \"SSL Context 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.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"parameters-to-attributes\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"https\",\n-                            \"ingress\",\n-                            \"listen\",\n-                            \"request\",\n-                            \"web service\"\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"publish\"\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+                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n+                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44829,293 +52884,391 @@\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_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\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+                            \"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\": \"HTTP Context Map\",\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.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Status Code\",\n+                                \"name\": \"box-file-id\",\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+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.http.StandardHttpContextMap\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n+                            \"org.apache.nifi.processors.box.ListBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\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+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\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+                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"http\",\n-                            \"https\",\n-                            \"response\",\n-                            \"web service\"\n+                            \"box\",\n+                            \"fetch\",\n+                            \"storage\"\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+                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"config-body\": {\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\": \"box-client-service\",\n+                                \"required\": true,\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\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"box-folder-id\",\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-                                            \"Replace\",\n-                                            \"Merge\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Config Strategy\",\n-                                        \"propertyName\": \"config-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Body of MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config Body\",\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\": \"config-body\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-file\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Replace\",\n-                                            \"Merge\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Config Strategy\",\n-                                        \"propertyName\": \"config-strategy\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Path to MIME type config file. Only one of Config File or Config Body may be used.\",\n-                                \"displayName\": \"Config File\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"config-file\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-strategy\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use default NiFi MIME Types.\",\n-                                        \"displayName\": \"Preset\",\n-                                        \"value\": \"Preset\"\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\": \"Use config MIME Types only.\",\n-                                        \"displayName\": \"Replace\",\n-                                        \"value\": \"Replace\"\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\": \"Use config together with default NiFi MIME Types.\",\n-                                        \"displayName\": \"Merge\",\n-                                        \"value\": \"Merge\"\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\": \"Preset\",\n-                                \"description\": \"Select the loading strategy for MIME Type configuration to be used.\",\n-                                \"displayName\": \"Config Strategy\",\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\": \"config-strategy\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-filename-in-detection\": {\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+                            \"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\": \"2.0.0-M3\"\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\": \"If true will pass the filename to Tika to aid in detection.\",\n-                                \"displayName\": \"Use Filename In Detection\",\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\": \"use-filename-in-detection\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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 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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"MIME\",\n-                            \"bzip2\",\n-                            \"compression\",\n-                            \"file\",\n-                            \"gzip\",\n-                            \"identify\",\n-                            \"mime.type\",\n-                            \"zip\"\n+                            \"box\",\n+                            \"storage\"\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.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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 id of the file\",\n+                                \"name\": \"box.id\"\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 name of the file\",\n+                                \"name\": \"filename\"\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 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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -45123,123 +53276,85 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Connection Timeout\",\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\": \"Connection Timeout\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Method\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"HTTP 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP URL\",\n+                                \"name\": \"box-folder-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"HTTP/2 Disabled\": {\n-                                \"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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"HTTP/2 Disabled\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Body Enabled\": {\n+                            \"conflict-resolution-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n-                                \"displayName\": \"Request Body Enabled\",\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\": \"Request Body Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Chunked Transfer-Encoding Enabled\": {\n+                            \"create-folder\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n@@ -45247,646 +53362,747 @@\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+                                        \"propertyDisplayName\": \"Subfolder Name\",\n+                                        \"propertyName\": \"subfolder-name\"\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\": \"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\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"name\": \"create-folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Content-Encoding\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request Content-Type\",\n+                                \"name\": \"subfolder-name\",\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+                            },\n+                            {\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\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"box\",\n+                            \"put\",\n+                            \"storage\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Date Header 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\": \"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+                            \"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\": \"Request Date Header Enabled\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Digest Authentication Enabled\": {\n+                            \"delete-mongo-delete-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Delete only the first document that matches the query.\",\n+                                        \"displayName\": \"Delete One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Delete every document that matches the query.\",\n+                                        \"displayName\": \"Delete Many\",\n+                                        \"value\": \"many\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Request Username\",\n-                                        \"propertyName\": \"Request Username\"\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-                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n-                                \"displayName\": \"Request Digest Authentication Enabled\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Digest Authentication Enabled\",\n+                                \"name\": \"delete-mongo-delete-mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Failure Penalization Enabled\": {\n+                            \"delete-mongo-fail-on-no-delete\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n+                                        \"description\": \"Fail when no documents are deleted.\",\n+                                        \"displayName\": \"True\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n+                                        \"description\": \"Do not fail when nothing is deleted.\",\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+                                \"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\": \"Request Failure Penalization Enabled\",\n+                                \"name\": \"delete-mongo-fail-on-no-delete\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Header Attributes Pattern\": {\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+                            \"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\": \"Request Header Attributes Pattern\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\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-                            \"Request Multipart Form-Data Filename 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-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n-                                        \"propertyName\": \"Request Multipart Form-Data 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+                            {\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+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Multipart Form-Data Name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Request Body Enabled\",\n-                                        \"propertyName\": \"Request Body Enabled\"\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+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request Multipart Form-Data Name\",\n+                                \"name\": \"Limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request 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\": \"Request 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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Request 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+                            \"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\": \"Request Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Request User-Agent\": {\n-                                \"description\": \"HTTP User-Agent Header applied to requests. RFC 7231 Section 5.5.3 describes recommend formatting.\",\n-                                \"displayName\": \"Request User-Agent\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request User-Agent\",\n-                                \"required\": false,\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request 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+                            \"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\": \"Request Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Attribute Name\": {\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Response Body Attribute Name\",\n+                                \"name\": \"Query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Attribute Size\": {\n-                                \"defaultValue\": \"256\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n-                                        \"propertyName\": \"Response Body Attribute Name\"\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+                            \"Sort\": {\n+                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n+                                \"displayName\": \"Sort\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Body Attribute Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Sort\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Ignored\": {\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-                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n-                                \"displayName\": \"Response Body Ignored\",\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\": \"Response Body Ignored\",\n-                                \"required\": true,\n+                                \"name\": \"get-mongo-send-empty\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Cache Enabled\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n-                                \"displayName\": \"Response Cache Enabled\",\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\": \"Response Cache Enabled\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Cache Size\": {\n-                                \"defaultValue\": \"10MB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n-                                        \"propertyName\": \"Response Cache Enabled\"\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+                            \"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\": \"Response Cache Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response 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+                            \"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\": \"Response Cookie Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Response FlowFile 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+                            \"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.\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response FlowFile Naming Strategy\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Generation Required\": {\n-                                \"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+                            \"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\": \"Response Generation Required\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Header Request Attributes 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\": \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Header Request Attributes Enabled\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"results-per-flowfile\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Redirects Enabled\": {\n+                            \"use-pretty-printing\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"False\",\n-                                        \"value\": \"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+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Response Redirects Enabled\",\n+                                \"name\": \"use-pretty-printing\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"name\": \"success\"\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+                            {\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"get\",\n+                            \"mongodb\",\n+                            \"read\"\n+                        ],\n+                        \"triggerSerially\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch 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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Socket Idle Connections\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Maximum number of idle connections to the HTTP URL.\",\n-                                \"displayName\": \"Socket Idle Connections\",\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Socket Idle Connections\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Socket 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+                            \"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\": \"Socket Idle Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Socket 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+                            \"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\": \"Socket Read Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\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+                            \"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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"Socket Write Timeout\",\n+                                \"name\": \"get-mongo-record-writer-factory\",\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\": \"2.0.0-M3\"\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, 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+                            \"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\": \"proxy-configuration-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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongodb-schema-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\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\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Response\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n-                                \"name\": \"Retry\"\n+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n-                                \"name\": \"Failure\"\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\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+                                \"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\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"http\",\n-                            \"https\",\n-                            \"rest\"\n+                            \"fetch\",\n+                            \"get\",\n+                            \"json\",\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"record\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\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+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -45899,2253 +54115,2025 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Insertion Record Path\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Join Strategy\": {\n+                            \"Mode\": {\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-                                    },\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\": \"\",\n+                                        \"displayName\": \"insert\",\n+                                        \"value\": \"insert\"\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\": \"update\",\n+                                        \"value\": \"update\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Wrapper\",\n-                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n-                                \"displayName\": \"Join Strategy\",\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\": \"Join Strategy\",\n+                                \"name\": \"Mode\",\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+                            \"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\": \"Maximum number of Bins\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Original Record Reader\": {\n-                                \"description\": \"The Record Reader for reading the 'original' FlowFile\",\n-                                \"displayName\": \"Original Record Reader\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Query Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Upsert\": {\n+                                \"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 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\": \"Original Record Reader\",\n+                                \"name\": \"Upsert\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"Record Writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"SQL\": {\n-                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n-                                \"dependencies\": [\n+                            \"put-mongo-update-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"With whole document\",\n+                                        \"value\": \"doc\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"With operators enabled\",\n+                                        \"value\": \"operators\"\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL\",\n-                                \"required\": true,\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+                                \"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\": \"Timeout\",\n+                                \"name\": \"put-mongo-update-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"name\": \"putmongo-update-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"name\": \"success\"\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+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are 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                         \"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+                                \"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-                            \"combine\",\n-                            \"enrichment\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"sql\",\n-                            \"streams\",\n-                            \"wrap\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\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+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\nLeave the RecordWriter property unset.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog; leave it empty to include all catalogs.\\nSet the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; leave it empty to include all Schemas.\\nSet the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included; leave it empty to include all Tables.\\n\\nConnect the \\\"success\\\" relationship to GenerateTableFetch.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to match the appropriate value for your RDBMS vendor.\\nSet \\\"Table Name\\\" to `${db.table.fullname}`\\nLeave the RecordWriter property unset.\\n\\nConnect the \\\"success\\\" relationship to ExecuteSQLRecord.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nConfigure the \\\"Record Writer\\\" property to specify a Record Writer that is appropriate for the desired output data type.\\nLeave the \\\"SQL select query\\\" unset.\\n\\nConnect the \\\"success\\\" relationship to the next Processor in the flow.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\"\n-                                    }\n-                                ],\n-                                \"description\": \"Perform a full load of a database, retrieving all rows from all tables, or a specific set of tables.\",\n-                                \"keywords\": [\n-                                    \"full load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"database\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": true,\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"list-db-include-count\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"list-db-refresh-interval\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\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+                            \"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\": \"list-db-tables-db-connection\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\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\": \"2.0.0-M3\"\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+                            \"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\": \"true\",\n+                                \"description\": \"Ordered execution of bulk-writes and break on error - otherwise arbitrary order and continue on error\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-types\",\n-                                \"required\": false,\n+                                \"name\": \"Ordered\",\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+                            \"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\": \"record-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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\": \"All FlowFiles that are received are routed to success\",\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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"database\",\n-                            \"jdbc\",\n-                            \"list\",\n-                            \"sql\",\n-                            \"table\"\n+                            \"bulk\",\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\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.mongodb.PutMongoBulkOperations\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB as bulk-update\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Mode\": {\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"bypass-validation\": {\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-                                \"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+                                \"defaultValue\": \"False\",\n+                                \"description\": \"        Enable or disable bypassing document schema validation during insert or update operations.\\n        Bypassing document validation is a Privilege Action in MongoDB.\\n        Enabling this property can result in authorization errors for users with limited privileges.\\n\",\n+                                \"displayName\": \"Bypass Validation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"bypass-validation\",\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+                            \"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\": \"Data Timeout\",\n+                                \"name\": \"insert_count\",\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+                            \"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\": \"Distributed Cache 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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Ignore Dotted Files\": {\n+                            \"ordered\": {\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\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\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\": \"Ignore Dotted Files\",\n+                                \"name\": \"ordered\",\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+                            \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"name\": \"update-key-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"Updates only the first document that matches the query.\",\n+                                        \"displayName\": \"Update One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Updates every document that matches the query.\",\n+                                        \"displayName\": \"Update Many\",\n+                                        \"value\": \"many\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\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\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"update-mode\",\n                                 \"required\": false,\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+                        ],\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-                            \"Remote Path\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\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+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"record\",\n+                            \"update\",\n+                            \"upsert\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Remote Path\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\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+                            \"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\": \"Remote Poll Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n+                                \"required\": true,\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\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\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\": \"Search Recursively\",\n+                                \"name\": \"allow-disk-use\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\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\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\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\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\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\": \"Transfer Mode\",\n-                                \"required\": false,\n+                                \"name\": \"json-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"mongo-agg-query\": {\n+                                \"description\": \"The aggregation query to be executed.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-agg-query\",\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+                            \"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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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.\",\n+                                \"displayName\": \"Date Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-date-format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\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: HTTP + AuthN, SOCKS + AuthN\",\n-                                \"displayName\": \"Proxy Configuration 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\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"results-per-flowfile\",\n                                 \"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\": \"2.0.0-M3\"\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.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\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ftp\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"source\"\n+                            \"aggregate\",\n+                            \"aggregation\",\n+                            \"mongo\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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.mongodb.RunMongoAggregation\",\n+                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"delete-gridfs-query\",\n+                                \"required\": false,\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\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\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\": \"Ignore Hidden Files\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"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+                            \"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\": \"Include File Attributes\",\n+                                \"name\": \"gridfs-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which files to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"gridfs-database-name\": {\n+                                \"description\": \"The name of the database to use\",\n+                                \"displayName\": \"Mongo Database Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Input Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\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+                            \"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\": \"Input Directory Location\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\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+                            \"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\": \"Maximum File Age\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"delete\",\n+                            \"gridfs\",\n+                            \"mongodb\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\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+                            \"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\": \"Minimum File Age\",\n+                                \"name\": \"gridfs-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Minimum File Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-operation-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\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\": \"Recurse Subdirectories\",\n+                                \"name\": \"mongo-operation-mode\",\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+                            \"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\": \"et-initial-listing-target\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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-                            \"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+                            {\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-node-identifier\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\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 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+                            \"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\": \"listing-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-listing-time\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-operation-time\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-performance-metrics\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-chunk-size\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"target-system-timestamp-precision\": {\n+                            \"putgridfs-enforce-uniqueness\": {\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\": \"No uniqueness will be enforced.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\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\": \"Both the filename and hash must be unique.\",\n+                                        \"displayName\": \"Both\",\n+                                        \"value\": \"both\"\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\": \"Only the filename must be unique.\",\n+                                        \"displayName\": \"Name\",\n+                                        \"value\": \"name\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"Only the file hash must be unique.\",\n+                                        \"displayName\": \"Hash\",\n+                                        \"value\": \"hash\"\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\": \"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\": \"target-system-timestamp-precision\",\n+                                \"name\": \"putgridfs-enforce-uniqueness\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"track-performance\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"putgridfs-hash-attribute\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-properties-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\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+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"file\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\n+                            \"gridfs\",\n+                            \"mongo\",\n+                            \"put\",\n+                            \"store\"\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.processors.mongodb.gridfs.PutGridFS\",\n+                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\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-                            },\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-                            },\n-                            {\n-                                \"description\": \"The user that owns the file in filesystem\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The group that owns the file in filesystem\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes in the file in filesystem\",\n-                                \"name\": \"file.size\"\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-                            },\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+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Catalog Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"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\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"registry\",\n+                            \"schema\",\n+                            \"table\"\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+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-social-media-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"backfill-minutes\",\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+                            \"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 Timeout\",\n+                                \"name\": \"backoff-attempts\",\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+                            \"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\": \"Data Timeout\",\n+                                \"name\": \"backoff-time\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"base-path\",\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+                            \"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\": \"File Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"batch-size\",\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+                            \"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\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n+                                \"name\": \"bearer-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"connect-timeout\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"expansions\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n+                                \"name\": \"maximum-backoff-time\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"media-fields\",\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+                            \"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\": \"Maximum File Age\",\n+                                \"name\": \"place-fields\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n+                                \"name\": \"poll-fields\",\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+                            \"queue-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum size of internal queue for streamed messages\",\n+                                \"displayName\": \"Queue Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"queue-size\",\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+                            \"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\": \"Minimum File Age\",\n+                                \"name\": \"read-timeout\",\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+                            \"stream-endpoint\": {\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+                                    },\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+                                    }\n+                                ],\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\": \"Minimum File Size\",\n+                                \"name\": \"stream-endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tweet-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"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\": \"Path Filter Regex\",\n+                                \"name\": \"user-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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.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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The MIME Type set to application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\n+                            {\n+                                \"description\": \"The number of Tweets in the FlowFile\",\n+                                \"name\": \"tweets\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-image-viewer-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-api-url\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Passphrase\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-personal-access-token\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Private Key Path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-workspace-name\",\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+                            }\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"attribute-list\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"attributes-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"destination\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\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\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"Remote Poll Batch Size\",\n+                                \"name\": \"destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\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\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n+                                \"name\": \"include-core-attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send Keep Alive On Timeout\": {\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\": \"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\": \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"include-schema\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\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\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\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\": \"Strict Host Key Checking\",\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-                            \"Use Compression\": {\n+                            {\n+                                \"description\": \"Failed to convert attributes to CSV\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Include Core 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+                                \"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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Include Core Attributes\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n-                                \"required\": false,\n+                                \"name\": \"JSON Handling Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\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\": \"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+                                \"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\": \"follow-symlink\",\n+                                \"name\": \"Null Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Pretty Print\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"flowfile-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\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\": \"Apply pretty print formatting to the output.\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"listing-strategy\",\n+                                \"name\": \"Pretty Print\",\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\": \"2.0.0-M3\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"attributes-to-json-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.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"attributes\",\n+                            \"flowfile\",\n+                            \"json\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname of the SFTP Server\",\n-                                \"name\": \"sftp.remote.host\"\n-                            },\n-                            {\n-                                \"description\": \"The port that was connected to on the SFTP Server\",\n-                                \"name\": \"sftp.remote.port\"\n-                            },\n-                            {\n-                                \"description\": \"The username of the user that performed the SFTP Listing\",\n-                                \"name\": \"sftp.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 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+                                \"description\": \"JSON representation of Attributes\",\n+                                \"name\": \"JSONAttributes\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -48159,113 +56147,98 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"listening-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"record-stats-limit\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ssl-context-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-stats-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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully received files.\",\n+                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"FTP\",\n-                            \"FTPS\",\n-                            \"ingest\",\n-                            \"listen\"\n+                            \"metrics\",\n+                            \"record\",\n+                            \"stats\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"name\": \"record.count\"\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+                                \"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                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -48280,306 +56253,326 @@\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-                        \"multiProcessorUseCases\": [],\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Default property values are sufficient.\\nConnect the 'success' relationship to CompressContent.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.IdentifyMimeType\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" = \\\"use mime.type attribute\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.CompressContent\"\n+                                    }\n+                                ],\n+                                \"description\": \"Check whether or not a FlowFile is compressed and if so, decompress it.\",\n+                                \"keywords\": [\n+                                    \"auto\",\n+                                    \"detect\",\n+                                    \"mime type\",\n+                                    \"compress\",\n+                                    \"decompress\",\n+                                    \"gzip\",\n+                                    \"bzip2\"\n+                                ],\n+                                \"notes\": \"If IdentifyMimeType determines that the content is not compressed, CompressContent will pass the FlowFile along to the 'success' relationship without attempting to decompress it.\"\n+                            }\n+                        ],\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-                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Base Path\",\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-                            },\n-                            \"HTTP Protocols\": {\n+                            \"Compression Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\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\": \"gzip\",\n+                                        \"value\": \"gzip\"\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\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\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-                                \"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-                            \"Listening Port\": {\n-                                \"description\": \"The Port to listen on for incoming connections\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Listening Port\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Data to Receive per Second\",\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Unconfirmed Flowfile Time\",\n+                                \"name\": \"Compression Format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Return Code\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorized-issuer-dn-pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"client-authentication\": {\n+                            \"Compression 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+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\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\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\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\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not request the client certificate on handshake\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"AUTO\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\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\": \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"health-check-port\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-thread-pool-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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-read-buffer-size\",\n+                                \"name\": \"Compression Level\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"multipart-request-max-size\",\n+                                \"name\": \"Mode\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n+                            \"Update Filename\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Update Filename\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\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\": \"Relationship for successfully received FlowFiles\",\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rest\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Mode\\\" = \\\"compress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm should be used.\",\n+                                \"description\": \"Compress the contents of a FlowFile\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Mode\\\" = \\\"decompress\\\"\\n\\\"Compression Format\\\" should be set to whichever compression algorithm was used to compress the data previously.\",\n+                                \"description\": \"Decompress the contents of a FlowFile\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -48589,213 +56582,251 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Grouping Attribute\",\n+                                \"required\": false,\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+                            \"Maximum Data Rate\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"name\": \"Maximum Data Rate\",\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+                            \"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\": \"Max Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum FlowFile Rate\",\n+                                \"required\": false,\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+                            \"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\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum Rate\",\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+                            \"Rate Control Criteria\": {\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+                                    },\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"Rate Control Criteria\",\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+                            \"Rate Controlled Attribute\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"attribute value\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\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\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n+                                \"name\": \"Rate Controlled Attribute\",\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+                            \"Rate Exceeded Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The FlowFile will be held in its input queue until the rate of data has fallen below the configured maximum and will then be allowed through.\",\n+                                        \"displayName\": \"Hold FlowFile\",\n+                                        \"value\": \"Hold FlowFile\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The FlowFile will be routed to the 'rate exceeded' Relationship.\",\n+                                        \"displayName\": \"Route to 'rate exceeded'\",\n+                                        \"value\": \"Route to 'rate exceeded'\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Hold FlowFile\",\n+                                \"description\": \"Specifies how to handle an incoming FlowFile when the maximum data rate has been exceeded.\",\n+                                \"displayName\": \"Rate Exceeded Strategy\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Rate Exceeded Strategy\",\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+                            \"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\": \"Receive Buffer Size\",\n+                                \"name\": \"Time Duration\",\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\": \"2.0.0-M3\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\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+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"relp\",\n-                            \"tcp\"\n+                            \"rate\",\n+                            \"rate control\",\n+                            \"throttle\",\n+                            \"throughput\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The command of the RELP frames.\",\n-                                \"name\": \"relp.command\"\n-                            },\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+                        \"useCases\": [\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"relp.sender\"\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `data rate`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how much data should be allowed through each second.\\n\\nFor example, to allow through 8 MB per second, set \\\"Maximum Rate\\\" to `8 MB`.\\n\",\n+                                \"description\": \"Limit the rate at which data is sent to a downstream system with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"data rate\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received over.\",\n-                                \"name\": \"relp.port\"\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many FlowFiles should be allowed through each second.\\n\\nFor example, to allow through 100 FlowFiles per second, set \\\"Maximum Rate\\\" to `100`.\\n\",\n+                                \"description\": \"Limit the rate at which FlowFiles are sent to a downstream system with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"flowfile rate\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n-                                \"name\": \"relp.txnr\"\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 sec`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each second.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `100`.\\nIf more than 100 requests come in during any one second, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n+                                \"description\": \"Reject requests that exceed a specific rate with little to no bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"request rate\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The mime.type of the content which is text/plain\",\n-                                \"name\": \"mime.type\"\n+                                \"configuration\": \"Set the \\\"Rate Control Criteria\\\" to `flowfile count`.\\nSet the \\\"Time Duration\\\" property to `1 min`.\\nSet the \\\"Rate Exceeded Strategy\\\" property to `Route to 'rate exceeded'`.\\nConfigure the \\\"Maximum Rate\\\" property to specify how many requests should be allowed through each minute.\\n\\nFor example, to allow through 100 requests per second, set \\\"Maximum Rate\\\" to `6000`.\\nThis will allow through 6,000 FlowFiles per minute, which averages to 100 FlowFiles per second. However, those 6,000 FlowFiles may come all within the first couple of\\nseconds, or they may come in over a period of 60 seconds. As a result, this gives us an average rate of 100 FlowFiles per second but allows for bursts of data.\\nIf more than 6,000 requests come in during any one minute, the additional requests will be routed to `rate exceeded` instead of `success`.\\n\",\n+                                \"description\": \"Reject requests that exceed a specific rate, allowing for bursts\",\n+                                \"keywords\": [\n+                                    \"throttle\",\n+                                    \"limit\",\n+                                    \"slow down\",\n+                                    \"request rate\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n-                        ]\n+                        ],\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -48808,356 +56839,399 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"Input Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to expect for Input\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Input 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+                            \"Output Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to convert to\",\n+                                \"displayName\": \"Output Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Output 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+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"character set\",\n+                            \"characterset\",\n+                            \"convert\",\n+                            \"text\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Catalog Name\",\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-                            \"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+                            \"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 Number of TCP Connections\",\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\": \"2.0.0-M3\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n+                            \"Statement Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\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\": \"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\": \"Specifies the type of SQL Statement to generate\",\n+                                \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Statement Type\",\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+                            \"Table Name\": {\n+                                \"description\": \"The name of the table that the statement should update\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Parse Messages\": {\n+                            \"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\": \"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\": \"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\": \"Parse Messages\",\n-                                \"required\": true,\n+                                \"name\": \"Translate Field Names\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Column Behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"Unmatched Field Behavior\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\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\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\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\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\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\": \"Protocol\",\n-                                \"required\": true,\n+                                \"name\": \"Unmatched Field Behavior\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"dependencies\": [\n+                            \"jts-quoted-identifiers\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"SSL Context Service\",\n+                                \"name\": \"jts-quoted-identifiers\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"socket-keep-alive\": {\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-                                            \"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+                                \"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\": \"socket-keep-alive\",\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\": \"Environment variables 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+                                \"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.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n+                            \"org.apache.nifi.processors.standard.PutSQL\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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-                                \"name\": \"success\"\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\": \"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\": \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\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\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\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\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\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\": \"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+                                \"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 protocol over which the Syslog message was received.\",\n-                                \"name\": \"syslog.protocol\"\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 port over which the Syslog message was received.\",\n-                                \"name\": \"syslog.port\"\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 mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n-                                \"name\": \"mime.type\"\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@@ -49172,248 +57246,132 @@\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                         \"multiProcessorUseCases\": [],\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-                            \"Client Auth\": {\n+                            \"Include Zero Record FlowFiles\": {\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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Number of TCP Connections\",\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-                                \"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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Include Zero Record FlowFiles\",\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+                            \"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\": \"Receive Buffer Size\",\n+                                \"name\": \"Record Reader\",\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+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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-                                \"dynamic\": false,\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+                            \"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\": \"pool-receive-buffers\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out 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 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                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\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.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-                        \"useCases\": [],\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"The Record Reader should be configured according to the incoming data format.\\nThe Record Writer should be configured according to the desired output format.\",\n+                                \"description\": \"Convert data from one record-oriented format to another\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\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 number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\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\": \"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@@ -49428,235 +57386,252 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ajust-immediately\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-auth\": {\n+                            \"character-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"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-                            \"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+                                \"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\": \"max-number-tcp-connections\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-size-socket-buffer\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n+                                \"name\": \"split-words-on-symbols\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"name\": \"text-character-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reader-error-handling-strategy\": {\n+                            \"text-line-count\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfers any records already received and closes the connection.\",\n-                                        \"displayName\": \"Transfer\",\n-                                        \"value\": \"Transfer\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Discards any records already received and closes the connection.\",\n-                                        \"displayName\": \"Discard\",\n-                                        \"value\": \"Discard\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reader-error-handling-strategy\",\n+                                \"name\": \"text-line-count\",\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+                            \"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\": \"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\": \"record-batch-size\",\n+                                \"name\": \"text-line-nonempty-count\",\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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\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+                            \"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\": \"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\": \"record-writer\",\n+                                \"name\": \"text-word-count\",\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\": \"2.0.0-M3\"\n-                                }\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\": \"2.0.0-M3\"\n-                                }\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\": \"Messages received successfully will be sent out this relationship.\",\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\": \"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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"record\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The host that sent the data.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The port that the processor accepted the connection on.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The number of lines of text present in the FlowFile content\",\n+                                \"name\": \"text.line.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+                                \"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\": \"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 number of words present in the original FlowFile\",\n+                                \"name\": \"text.word.count\"\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 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-standard-nar\",\n                         \"buildInfo\": {\n@@ -49671,166 +57646,183 @@\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                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"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\": \"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+                            \"fail_when_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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"fail_when_empty\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n+                                \"name\": \"hash_algorithm\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sending Host Port\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n                                 \"name\": \"success\"\n+                            },\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"source\",\n-                            \"udp\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -49840,208 +57832,342 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"@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\": \"Character Set\",\n+                                \"name\": \"@OnScheduled Pause Time\",\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+                            \"@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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Local Network Interface\",\n-                                \"required\": false,\n+                                \"name\": \"@OnStopped Pause Time\",\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.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\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\": \"Max Size of Message Queue\",\n+                                \"name\": \"@OnUnscheduled Pause Time\",\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+                            \"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\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Content Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CustomValidate Pause Time\",\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+                            \"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\": \"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\": \"Receive Buffer Size\",\n+                                \"name\": \"Fail When @OnScheduled called\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n+                                \"name\": \"Fail When @OnStopped called\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-timeout\",\n+                                \"name\": \"Fail When @OnUnscheduled called\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"FlowFile Exception Class\",\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\": \"2.0.0-M3\"\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 flow file.\",\n-                                \"displayName\": \"Record Writer\",\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\": \"record-writer\",\n+                                \"name\": \"FlowFile Exception Iterations\",\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\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sending-host\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sending-host-port\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Rollback Iterations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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+                                \"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\": \"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\": \"Ignore Interrupts When Paused\",\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+                                \"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\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"description\": \"FlowFiles processed successfully.\",\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\": \"FlowFiles that failed to process.\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"record\",\n-                            \"source\",\n-                            \"udp\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -50053,215 +58179,340 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Attributes to Ignore\",\n+                                \"name\": \"bloom-filter-certainty\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Log\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"cache-identifier\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Log FlowFile Properties\": {\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+                                        \"displayName\": \"Multiple Files\",\n+                                        \"value\": \"multiple\"\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\": \"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\": \"Log FlowFile Properties\",\n+                                \"name\": \"deduplication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Level\": {\n+                            \"distributed-map-cache\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"multiple\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\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+                                \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"filter-capacity-hint\": {\n+                                \"defaultValue\": \"25000\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"bloom-filter\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filter Type\",\n+                                        \"propertyName\": \"filter-type\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"filter-capacity-hint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filter-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"trace\",\n-                                        \"value\": \"trace\"\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\": \"\",\n-                                        \"displayName\": \"debug\",\n-                                        \"value\": \"debug\"\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-                                        \"description\": \"\",\n-                                        \"displayName\": \"info\",\n-                                        \"value\": \"info\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"single\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n+                                        \"propertyName\": \"deduplication-strategy\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"filter-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"include-zero-record-flowfiles\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"error\",\n-                                        \"value\": \"error\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the Attributes\",\n-                                \"displayName\": \"Log Level\",\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\": \"Log Level\",\n+                                \"name\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Payload\": {\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\": \"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+                                \"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\": \"Log Payload\",\n+                                \"name\": \"put-cache-identifier\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Log prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output Format\": {\n+                            \"record-hashing-algorithm\": {\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\": \"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\": \"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\": \"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\": \"Line per Attribute\",\n-                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n-                                \"displayName\": \"Output Format\",\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\": \"Output Format\",\n+                                \"name\": \"record-hashing-algorithm\",\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+                            \"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\": \"attributes-to-ignore-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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"attributes-to-log-regex\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"character-set\",\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\": \"2.0.0-M3\"\n+                                }\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.DetectDuplicate\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\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                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"attributes\",\n-                            \"logging\"\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.LogAttribute\",\n-                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\n                         },\n@@ -50278,72 +58529,132 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-level\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"log-message\": {\n-                                \"description\": \"The log message to emit\",\n-                                \"displayName\": \"Log message\",\n+                            \"Cache The Entry 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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cache The Entry Identifier\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Description\",\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+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\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                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n+                            \"dedupe\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"hash\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -50357,106 +58668,107 @@\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+                                \"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                         ],\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"include-empty-values\": {\n+                            \"Distribution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"true\",\n-                                \"description\": \"Include null or blank values for keys that are null or blank\",\n-                                \"displayName\": \"Include Empty Values\",\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\": \"include-empty-values\",\n+                                \"name\": \"Distribution Strategy\",\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+                            \"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\": \"lookup-service\",\n+                                \"name\": \"Number of Relationships\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                                \"description\": \"Where to route flowfiles for this relationship index\",\n+                                \"name\": \"1\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"lookup\"\n+                            \"distribute\",\n+                            \"load balance\",\n+                            \"round robin\",\n+                            \"route\",\n+                            \"weighted\"\n                         ],\n                         \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": true,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n-                        \"typeDescription\": \"Lookup attributes from a lookup service\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -50465,245 +58777,67 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Root Record Path\": {\n-                                \"description\": \"A RecordPath that points to a child Record within each of the top-level Records in the FlowFile. If specified, the additional RecordPath properties will be evaluated against this child Record instead of the top-level Record. This allows for performing enrichment against multiple child Records within a single top-level Record.\",\n-                                \"displayName\": \"Root Record Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Root Record Path\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\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\": \"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.LookupService\",\n-                                    \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"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\": \"2.0.0-M3\"\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 \\\"Result RecordPath\\\" 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-                                \"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\": \"2.0.0-M3\"\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-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"use-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Record Update Strategy\",\n-                                        \"propertyName\": \"record-update-strategy\"\n-                                    }\n-                                ],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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. If the given Record Paths evaluate such that multiple sub-records are evaluated, the parent Record will be routed to 'unmatched' unless all sub-records match.\",\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+                                \"name\": \"Number of Copies\",\n                                 \"required\": true,\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                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All records will be sent to this Relationship if configured to do so, unless a failure occurs\",\n+                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\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                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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+                            \"duplicate\",\n+                            \"load\",\n+                            \"test\"\n                         ],\n                         \"triggerSerially\": false,\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n+                                \"name\": \"copy.index\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -50717,668 +58851,338 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\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+                            \"Encoded Line Length\": {\n+                                \"defaultValue\": \"76\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"dependentValues\": [\n+                                            \"base32\",\n+                                            \"base64\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n-                                    {\n                                         \"dependentValues\": [\n-                                            \"ZIP\"\n+                                            \"MULTIPLE_LINES\"\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+                                        \"propertyDisplayName\": \"Line Output Mode\",\n+                                        \"propertyName\": \"Line Output Mode\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"Encode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\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+                                \"description\": \"Each line of encoded data will contain up to the configured number of characters, rounded down to the nearest multiple of 4.\",\n+                                \"displayName\": \"Encoded Line Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Correlation Attribute Name\",\n-                                \"required\": false,\n+                                \"name\": \"Encoded Line Length\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Delimiter Strategy\": {\n+                            \"Encoding\": {\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+                                        \"description\": \"Encode or decode using Base64 set of characters\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"base64\"\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+                                        \"description\": \"Encode or decode using Base32 set of characters\",\n+                                        \"displayName\": \"Base32\",\n+                                        \"value\": \"base32\"\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+                                        \"description\": \"Encode or decode using hexadecimal set of characters\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"hex\"\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+                                \"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\": \"Delimiter Strategy\",\n+                                \"name\": \"Encoding\",\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\": \"Environment variables 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+                            \"Line Output Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n+                                        \"description\": \"The encoded content will be written as a single line.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"SINGLE_LINE\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"The encoded content will be written as multiple lines.\",\n+                                        \"displayName\": \"Multiple Lines\",\n+                                        \"value\": \"MULTIPLE_LINES\"\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\": \"Environment variables 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+                                \"defaultValue\": \"SINGLE_LINE\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n+                                            \"Encode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n+                                            \"base32\",\n+                                            \"base64\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n                                     }\n                                 ],\n-                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n-                                \"displayName\": \"Header\",\n+                                \"description\": \"Controls the line formatting for encoded content based on selected property values.\",\n+                                \"displayName\": \"Line Output Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Header File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Line Output Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Path\": {\n+                            \"Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Transform original input to encoded representation\",\n+                                        \"displayName\": \"Encode\",\n+                                        \"value\": \"Encode\"\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+                                        \"description\": \"Transform encoded input to original representation\",\n+                                        \"displayName\": \"Decode\",\n+                                        \"value\": \"Decode\"\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+                                \"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\": \"Keep Path\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\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+                            {\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"base32\",\n+                            \"base64\",\n+                            \"decode\",\n+                            \"encode\",\n+                            \"hex\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"batch-count\": {\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+                                \"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\": \"Maximum Number of Entries\",\n+                                \"name\": \"batch-count\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"group-id\",\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+                            \"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\": \"Merge Format\",\n+                                \"name\": \"inactive-timeout\",\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>. 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Merge Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"initial-order\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Group Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum-order\",\n+                                \"required\": false,\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+                            \"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\": \"Minimum Number of Entries\",\n+                                \"name\": \"order-attribute\",\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\": \"Environment variables 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+                            \"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\": \"mergecontent-metadata-strategy\",\n+                                \"name\": \"wait-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\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\": \"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+                                \"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\": \"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+                                \"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\": \"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+                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"name\": \"success\"\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+                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n+                                \"name\": \"wait\"\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-                        ],\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+                                \"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-                                \"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                         \"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+                            \"order\",\n+                            \"sort\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Demarcator\\\" = \\\"\\\\n\\\" (a newline can be inserted by pressing Shift + Enter)\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n-                                \"description\": \"Concatenate FlowFiles with textual content together in order to create fewer, larger FlowFiles.\",\n-                                \"keywords\": [\n-                                    \"concatenate\",\n-                                    \"bundle\",\n-                                    \"aggregate\",\n-                                    \"bin\",\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"smash\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n-                                \"description\": \"Concatenate FlowFiles with binary content together in order to create fewer, larger FlowFiles.\",\n-                                \"keywords\": [\n-                                    \"concatenate\",\n-                                    \"bundle\",\n-                                    \"aggregate\",\n-                                    \"bin\",\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"smash\"\n-                                ],\n-                                \"notes\": \"Not all binary data can be concatenated together. Whether or not this configuration is valid depends on the type of your data.\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Defragment\\\"\\n\\\"Merge Format\\\" = the value of Merge Format depends on the desired output format. If the file was previously zipped together and was split apart by UnpackContent,\\n    a Merge Format of \\\"ZIP\\\" makes sense. If it was previously a .tar file, a Merge Format of \\\"TAR\\\" makes sense. If the data is textual, \\\"Binary Concatenation\\\" can be\\n    used to combine the text into a single document.\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the fragments to 'failure'. A reasonable value might be \\\"5 mins\\\"\\n\\nFor textual data, \\\"Demarcator\\\" should be set to a newline (\\\\n), set by pressing Shift+Enter in the UI. For binary data, \\\"Demarcator\\\" should be left blank.\\n\",\n-                                \"description\": \"Reassemble a FlowFile that was previously split apart into smaller FlowFiles by a processor such as SplitText, UnpackContext, SplitRecord, etc.\",\n-                                \"keywords\": [\n-                                    \"reassemble\",\n-                                    \"repack\",\n-                                    \"merge\",\n-                                    \"recombine\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\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\": \"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\": \"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\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n+                                \"name\": \"EnforceOrder.detail\"\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\": \"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\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -51392,280 +59196,185 @@\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-                        \"multiProcessorUseCases\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\n\\nAdd a single additional property. The name of the property should describe the field on which the data is being merged together.\\nThe property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, to merge together data that has the same value for the \\\"productSku\\\" field, add a property named `productSku` with a value of `/productSku`.\\n\\nConnect the \\\"success\\\" Relationship to MergeRecord.\\nAuto-terminate the \\\"original\\\" Relationship.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Maximum Number of Records\\\" property to a value at least as large as the \\\"Minimum Number of Records.\\\" If there is no need to limit the maximum number of\\n    records per file, this number can be set to a value that will never be reached such as `1000000000`.\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\nSet the value of the \\\"Correlation Attribute Name\\\" property to the name of the property that you added in the PartitionRecord Processor. For example, if merging data\\n    based on the \\\"productSku\\\" field, the property in PartitionRecord was named `productSku` so the value of the \\\"Correlation Attribute Name\\\" property should\\n    be `productSku`.\\nSet the \\\"Maximum Number of Bins\\\" property to a value that is at least as large as the different number of values that will be present for the Correlation Attribute.\\n    For example, if you expect 1,000 different SKUs, set this value to at least `1001`. It is not advisable, though, to set the value above 10,000.\\n\\nConnect the 'merged' Relationship to the next component in the flow.\\nAuto-terminate the 'original' Relationship.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.MergeRecord\"\n-                                    }\n-                                ],\n-                                \"description\": \"Combine together many Records that have the same value for a particular field in the data, in order to create a single, larger file\",\n-                                \"keywords\": [\n-                                    \"merge\",\n-                                    \"combine\",\n-                                    \"aggregate\",\n-                                    \"like records\",\n-                                    \"similar data\"\n-                                ],\n-                                \"notes\": \"\"\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+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Attribute Strategy\": {\n+                            \"Destination\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Strategy\",\n+                                \"name\": \"Destination\",\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-                            \"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-                            \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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.bin.count\",\n+                                \"name\": \"Max String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"merge-strategy\": {\n+                            \"Null Value Representation\": {\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\": \"\",\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\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\": \"\",\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\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\": \"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\": \"merge-strategy\",\n+                                \"name\": \"Null Value Representation\",\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+                            \"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\": \"min-bin-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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"min-records\",\n+                                \"name\": \"Path Not Found Behavior\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"record-writer\",\n+                                \"name\": \"Return 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.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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                         \"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+                                \"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\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\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\": \"The FlowFile containing the merged records\",\n-                                \"name\": \"merged\"\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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"content\",\n-                            \"correlation\",\n-                            \"event\",\n-                            \"merge\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"JSON\",\n+                            \"JsonPath\",\n+                            \"evaluate\"\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\n\\nConnect the 'merged' Relationship to the next component in the flow. Auto-terminate the 'original' Relationship.\\n\",\n-                                \"description\": \"Combine together many arbitrary Records in order to create a single, larger file\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\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.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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -51677,95 +59386,152 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"End Offset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove All Content\": {\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\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n-                                \"displayName\": \"Remove All Content\",\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Start Offset\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Processed flowfiles.\",\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                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"binary\",\n-                            \"discard\",\n-                            \"keep\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"evaluate\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -51774,253 +59540,170 @@\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                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Activity Restored Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Continually Send Messages\": {\n+                            \"Destination\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\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+                                \"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\": \"Continually Send Messages\",\n+                                \"name\": \"Destination\",\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+                            \"Output: Indent\": {\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+                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n+                                \"displayName\": \"Output: Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Copy Attributes\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Inactivity Message\",\n+                                \"name\": \"Output: Indent\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Monitoring Scope\": {\n+                            \"Output: Method\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"node\",\n-                                        \"value\": \"node\"\n+                                        \"displayName\": \"xml\",\n+                                        \"value\": \"xml\"\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+                                        \"displayName\": \"html\",\n+                                        \"value\": \"html\"\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+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\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\": \"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\": \"Reporting Node\",\n+                                \"name\": \"Output: Method\",\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+                            \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Threshold Duration\",\n+                                \"name\": \"Output: Omit XML Declaration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Wait for Activity\": {\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\": \"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+                                \"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\": \"Wait for Activity\",\n+                                \"name\": \"Validate DTD\",\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\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+                                \"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\": \"All incoming FlowFiles are routed to success\",\n-                                \"name\": \"success\"\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\": \"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\": \"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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"active\",\n-                            \"activity\",\n-                            \"detection\",\n-                            \"flow\",\n-                            \"inactive\",\n-                            \"monitor\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"XQuery\",\n+                            \"evaluate\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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-standard-nar\",\n                         \"buildInfo\": {\n@@ -52034,132 +59717,161 @@\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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"attribute-cache-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Argument Delimiter\",\n+                                \"required\": true,\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Batch Duration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Command\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Command Arguments\",\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 'Batch Duration' is set.\",\n+                                \"displayName\": \"Output MIME Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"signal-buffer-count\",\n-                                \"required\": true,\n+                                \"name\": \"Output MIME type\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-delta\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Redirect Error Stream\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Working Directory\",\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.Wait\"\n-                        ],\n+                        \"restricted\": true,\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\": \"All created FlowFiles are routed 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-                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"notify\",\n-                            \"release\",\n-                            \"signal\"\n+                            \"command\",\n+                            \"external\",\n+                            \"invoke\",\n+                            \"process\",\n+                            \"script\",\n+                            \"source\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -52173,122 +59885,346 @@\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-                        \"multiProcessorUseCases\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"configurations\": [\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+                        \"multiProcessorUseCases\": [],\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\": \"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\": \"2.0.0-M3\"\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\": \"Environment variables 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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can help improve performance by batching many flowfiles together into 1 larger file that is transmitted by InvokeHTTP.\\n\\n    Connect the success relationship of PackageFlowFile to the input of InvokeHTTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     },\n                                     {\n-                                        \"configuration\": \"    \\\"HTTP Method\\\" = \\\"POST\\\" to send data to ListenHTTP.\\n    \\\"HTTP URL\\\" should include the hostname, port, and path to the ListenHTTP.\\n    \\\"Request Content-Type\\\" = \\\"${mime.type}\\\" because PackageFlowFile output files have attribute mime.type=application/flowfile-v3.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.InvokeHTTP\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n                                     },\n                                     {\n-                                        \"configuration\": \"    \\\"Listening Port\\\" = a unique port number.\\n\\n    ListenHTTP automatically unpacks files that have attribute mime.type=application/flowfile-v3.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that InvokeHTTP sends, then the original 99 FlowFiles will be output by ListenHTTP.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListenHTTP\"\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-                                \"description\": \"Send FlowFile content and attributes from one NiFi instance to another NiFi instance.\",\n-                                \"keywords\": [\n-                                    \"flowfile\",\n-                                    \"attributes\",\n-                                    \"content\",\n-                                    \"ffv3\",\n-                                    \"flowfile-stream-v3\",\n-                                    \"transfer\"\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+                            \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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-                                \"notes\": \"A Remote Process Group is preferred to send FlowFiles between two NiFi instances, but an alternative is to use PackageFlowFile then InvokeHTTP sending to ListenHTTP.\"\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\": \"dbf-normalize\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configurations\": [\n+                            \"dbf-user-logical-types\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can improve storage efficiency by batching many FlowFiles together into 1 larger file that is stored.\\n\\n    Connect the success relationship to the input of any NiFi egress processor for offline storage.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"configuration\": \"    \\\"Packaging Format\\\" = \\\"application/flowfile-v3\\\".\\n\\n    Connect the output of a NiFi ingress processor that reads files stored offline to the input of UnpackContent.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that is read from storage, then the original 99 FlowFiles will be output by UnpackContent.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.UnpackContent\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Export FlowFile content and attributes from NiFi to external storage and reimport.\",\n-                                \"keywords\": [\n-                                    \"flowfile\",\n-                                    \"attributes\",\n-                                    \"content\",\n-                                    \"ffv3\",\n-                                    \"flowfile-stream-v3\",\n-                                    \"offline\",\n-                                    \"storage\"\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\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                                \"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\": \"max-batch-size\",\n+                                \"name\": \"esql-auto-commit\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.UnpackContent\"\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                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\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\": \"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                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"package\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\n-                                \"name\": \"mime.type\"\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@@ -52302,208 +60238,338 @@\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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"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\": \"ACCEPT_EMPTY_EXTENSIONS\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\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+                            \"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\": \"DATETIME_REPRESENTATION\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FIELDS_DESTINATION\": {\n+                            \"dbf-user-logical-types\": {\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 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\": \"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\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\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\": \"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+                                \"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\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n+                                \"name\": \"esql-auto-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TIME_REPRESENTATION\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"esqlrecord-normalize\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Local Timezone (system Default)\",\n-                                        \"value\": \"Local Timezone (system Default)\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"false\",\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\": \"TIME_REPRESENTATION\",\n+                                \"name\": \"esqlrecord-normalize\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sql-pre-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\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                         ],\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\": \"Successfully created FlowFile from SQL query result set.\",\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\": \"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                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"cef\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"system\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The version of the CEF message.\",\n-                                \"name\": \"cef.header.version\"\n+                                \"description\": \"Contains the number of rows returned in the select query\",\n+                                \"name\": \"executesql.row.count\"\n                             },\n                             {\n-                                \"description\": \"The Device Vendor of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVendor\"\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.duration\"\n                             },\n                             {\n-                                \"description\": \"The Device Product of the CEF message.\",\n-                                \"name\": \"cef.header.deviceProduct\"\n+                                \"description\": \"Duration of the query execution time in milliseconds\",\n+                                \"name\": \"executesql.query.executiontime\"\n                             },\n                             {\n-                                \"description\": \"The Device Version of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVersion\"\n+                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.fetchtime\"\n                             },\n                             {\n-                                \"description\": \"The Device Event Class ID of the CEF message.\",\n-                                \"name\": \"cef.header.deviceEventClassId\"\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\": \"The name of the CEF message.\",\n-                                \"name\": \"cef.header.name\"\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\": \"The severity of the CEF message.\",\n-                                \"name\": \"cef.header.severity\"\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\": \"The key and value generated by the parsing of the message.\",\n-                                \"name\": \"cef.extension.*\"\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-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -52512,101 +60578,233 @@\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+                                \"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                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Character Set\",\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Command Path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Ignore STDIN\": {\n+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output MIME Type\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"restricted\": 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-                                \"name\": \"success\"\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\": \"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+                                \"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                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"system\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The name of the command executed\",\n+                                \"name\": \"execution.command\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n+                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n+                                \"name\": \"execution.command.args\"\n                             },\n                             {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n+                                \"description\": \"The exit status code returned from executing the command\",\n+                                \"name\": \"execution.status\"\n                             },\n                             {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                                \"description\": \"Any error messages returned from executing the command\",\n+                                \"name\": \"execution.error\"\n                             },\n                             {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\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@@ -52620,175 +60818,189 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies which character set of the Syslog messages\",\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-                            \"include_policy\": {\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+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Grok Expression\",\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+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"Keep Empty Captures\": {\n                                 \"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 Syslog Message body will be included in the attributes.\",\n-                                \"displayName\": \"Include Message Body in Attributes\",\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\": \"include_policy\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Empty Captures\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"nil_policy\": {\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\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Named captures only\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The missing field will not have an attribute added.\",\n-                                        \"displayName\": \"OMIT\",\n-                                        \"value\": \"OMIT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The missing field will have an empty attribute added.\",\n-                                        \"displayName\": \"NULL\",\n-                                        \"value\": \"NULL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n-                                        \"displayName\": \"DASH\",\n-                                        \"value\": \"DASH\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NULL\",\n-                                \"description\": \"Defines how NIL values are handled for header fields.\",\n-                                \"displayName\": \"NIL Policy\",\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\": \"nil_policy\",\n+                                \"name\": \"Named captures only\",\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+                        \"restricted\": true,\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+                                \"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 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+                                \"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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"syslog5424\",\n-                            \"system\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\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-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -52797,173 +61009,97 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"record-reader\",\n+                                \"name\": \"cache-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\": \"2.0.0-M3\"\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+                            \"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-writer\",\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.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\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+                                \"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-                                \"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                         ],\n                         \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bin\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n                             \"record\",\n-                            \"recordpath\",\n-                            \"rpath\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"schema\",\n+                            \"text\",\n+                            \"xml\"\n                         ],\n                         \"triggerSerially\": false,\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the type of data that is being used to partition the data. The property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, if we want to separate records based on their `transactionType` field, we could add a new property named `transactionType`. The value of the property might be `/transaction/type`. An input FlowFile will then be separated into as few FlowFiles as possible such that each output FlowFile has the same value for the `transactionType` field.\\n\",\n-                                \"description\": \"Separate records into separate FlowFiles so that all of the records in a FlowFile have the same value for a given field or set of fields.\",\n-                                \"keywords\": [\n-                                    \"separate\",\n-                                    \"split\",\n-                                    \"partition\",\n-                                    \"break apart\",\n-                                    \"colocate\",\n-                                    \"segregate\",\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise.\\n\\nFor example, if we want to separate records based on whether or not they have a transaction total of more than $1,000 we could add a new property named `largeTransaction` with a value of `/transaction/total > 1000`. This will create two FlowFiles. In the first, all records will have a total over `1000`. In the second, all records will have a transaction less than or equal to 1000. Each FlowFile will have an attribute named `largeTransaction` with a value of `true` or `false`.\\n\",\n-                                \"description\": \"Separate records based on whether or not they adhere to a specific criteria\",\n-                                \"keywords\": [\n-                                    \"separate\",\n-                                    \"split\",\n-                                    \"partition\",\n-                                    \"break apart\",\n-                                    \"segregate\",\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"recordpath\",\n-                                    \"criteria\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                                \"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\": \"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+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n+                                \"name\": \"record.error.message\"\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\": \"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+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -52972,573 +61108,370 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\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+                            \"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\": \"Data Record Path\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type Record Path\": {\n-                                \"dependencies\": [\n+                            \"Enable Canonical Equivalence\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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. (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE)\",\n-                                \"displayName\": \"Statement Type Record Path\",\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\": \"Statement Type Record Path\",\n+                                \"name\": \"Enable Canonical Equivalence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\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\": \"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.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\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\": \"database-session-autocommit\",\n-                                \"required\": false,\n+                                \"name\": \"Enable Case-insensitive Matching\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-type\": {\n+                            \"Enable DOTALL Mode\": {\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\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"db-type\",\n-                                \"required\": false,\n+                                \"name\": \"Enable DOTALL Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-allow-multiple-statements\": {\n+                            \"Enable Literal Parsing of the Pattern\": {\n                                 \"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+                                \"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\": \"put-db-record-allow-multiple-statements\",\n+                                \"name\": \"Enable Literal Parsing of the Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-binary-format\": {\n+                            \"Enable Multiline Mode\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"Base64\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-binary-format\",\n-                                \"required\": true,\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\": \"Environment variables 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+                                \"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\": \"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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"put-db-record-query-timeout\",\n+                                \"name\": \"Enable Multiline Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-identifiers\": {\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\": \"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+                                \"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\": \"put-db-record-quoted-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-quoted-table-identifiers\": {\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\": \"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+                                \"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\": \"put-db-record-record-reader\",\n+                                \"name\": \"Enable Unicode-aware Case Folding\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-schema-name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-statement-type\": {\n+                            \"Enable Unix Lines Mode\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Use Record Path\",\n-                                        \"value\": \"Use Record Path\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-table-name\",\n+                                \"name\": \"Enable Unix Lines Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-translate-field-names\": {\n+                            \"Enable named group support\": {\n                                 \"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\": \"If set to true, when named groups are present in the regular expression, the name of the\\ngroup will be used in the attribute name as opposed to the group index.  All capturing groups\\nmust be named, if the number of groups (not including capture group 0) does not equal the\\nnumber of named groups validation will fail.\",\n+                                \"displayName\": \"Enable named group support\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-translate-field-names\",\n+                                \"name\": \"Enable named group support\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-column-behavior\": {\n+                            \"Enable repeating capture group\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"put-db-record-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Enable repeating capture group\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-field-behavior\": {\n+                            \"Include Capture Group 0\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"put-db-record-unmatched-field-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Include Capture Group 0\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-db-record-update-keys\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            \"rollback-on-failure\": {\n+                            \"Permit Whitespace and Comments in Pattern\": {\n                                 \"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+                                \"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\": \"table-schema-cache-size\",\n+                                \"name\": \"Permit Whitespace and Comments in Pattern\",\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-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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-                                \"name\": \"success\"\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-                                \"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+                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n+                                \"name\": \"unmatched\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"delete\",\n-                            \"insert\",\n-                            \"jdbc\",\n-                            \"put\",\n-                            \"record\",\n-                            \"sql\",\n-                            \"update\"\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.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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\",\n-                                \"description\": \"Insert records into a database\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -53556,120 +61489,123 @@\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache update 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-                                        \"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-                                    }\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+                            \"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\": \"Cache update strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache flow files\",\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 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\": \"2.0.0-M3\"\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+                            \"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\": \"Max cache entry 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\": \"Environment variables 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.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.FetchDistributedMapCache\"\n+                            \"org.apache.nifi.processors.standard.PutDistributedMapCache\"\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\": \"If the cache was successfully communicated with it will be routed 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\": \"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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"cache\",\n                             \"distributed\",\n-                            \"map\",\n-                            \"put\"\n+                            \"fetch\",\n+                            \"map\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -53678,447 +61614,69 @@\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\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\": \"Attach File\",\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\": \"Environment variables 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"CC\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"From\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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 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\": \"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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP Username\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SMTP X-Mailer Header\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Subject\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"To\",\n-                                \"required\": false,\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 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\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"authorization-mode\": {\n-                                \"allowableValues\": [\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{FTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{FTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{FTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchFTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFTP\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n+                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${ftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${ftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{FTP_PASSWORD}\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFTP\"\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-                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                                \"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+                                \"description\": \"Retrieve all files in a directory of an FTP Server\",\n+                                \"keywords\": [\n+                                    \"ftp\",\n+                                    \"file\",\n+                                    \"transform\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": 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-                            \"email\",\n-                            \"notify\",\n-                            \"put\",\n-                            \"smtp\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Conflict Resolution\": {\n+                            \"Completion 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\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\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\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\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\": \"Conflict Resolution\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n@@ -54162,59 +61720,36 @@\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+                                \"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\": true,\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-                            \"Dot Rename\": {\n-                                \"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-                                \"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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -54246,47 +61781,37 @@\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\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\": \"Environment variables 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\": \"Environment variables 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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -54335,55 +61860,22 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"Reject Zero-Byte Files\",\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\": \"Environment variables 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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n-                                \"required\": false,\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Transfer Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"Binary\",\n@@ -54434,14 +61926,62 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n@@ -54458,15 +61998,15 @@\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"ftp-use-utf8\",\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+                                \"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@@ -54475,55 +62015,90 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\"\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\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\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\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n-                                \"name\": \"failure\"\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\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n+                            \"fetch\",\n                             \"files\",\n                             \"ftp\",\n-                            \"put\",\n-                            \"remote\"\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -54537,178 +62112,307 @@\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+                                \"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-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n+                                    }\n+                                ],\n+                                \"description\": \"Ingest all files from a directory into NiFi\",\n+                                \"keywords\": [\n+                                    \"local\",\n+                                    \"files\",\n+                                    \"filesystem\",\n+                                    \"ingest\",\n+                                    \"ingress\",\n+                                    \"get\",\n+                                    \"source\",\n+                                    \"input\",\n+                                    \"fetch\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Input Directory\\\" property to point to the directory that you want to ingest files from.\\nSet the \\\"Input Directory Location\\\" property to \\\"Local\\\"\\nSet the \\\"File Filter\\\" property to a Regular Expression that matches the filename (without path) of the files that you want to ingest. For example, to ingest all .jpg files, set the value to `.*\\\\.jpg`\\nOptionally, set \\\"Minimum File Age\\\" to a small value such as \\\"1 min\\\" to avoid ingesting files that are still being written to.\\n\\nConnect the 'success' Relationship to the FetchFile processor.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListFile\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Set the \\\"File to Fetch\\\" property to `${absolute.path}/${filename}`\\nSet the \\\"Completion Strategy\\\" property to `None`\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchFile\"\n+                                    }\n+                                ],\n+                                \"description\": \"Ingest specific files from a directory into NiFi, filtering on filename\",\n+                                \"keywords\": [\n+                                    \"local\",\n+                                    \"files\",\n+                                    \"filesystem\",\n+                                    \"ingest\",\n+                                    \"ingress\",\n+                                    \"get\",\n+                                    \"source\",\n+                                    \"input\",\n+                                    \"fetch\",\n+                                    \"filter\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Conflict Resolution Strategy\": {\n+                            \"Completion Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\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                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"Deletes the original file from the file system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\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\": \"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\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Missing Directories\": {\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\": \"Environment variables 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\": \"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+                                \"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\": \"Create Missing Directories\",\n+                                \"name\": \"Log level when file not found\",\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+                            \"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+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    }\n+                                ],\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when permission denied\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Group\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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+                            \"Move Conflict 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+                                    },\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Count\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n+                                \"name\": \"Move Conflict Strategy\",\n+                                \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"name\": \"Move Destination Directory\",\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.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.GetFile\"\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\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\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\": \"Files that could not be written to the output directory for some reason are transferred to this relationship\",\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n+                            \"fetch\",\n                             \"files\",\n                             \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n                             \"local\",\n-                            \"put\"\n+                            \"source\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -54724,193 +62428,78 @@\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"put-record-include-zero-record-results\": {\n-                                \"allowableValues\": [\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"configuration\": \"The \\\"Hostname\\\" property should be set to the fully qualified hostname of the FTP Server. It's a good idea to parameterize     this property by setting it to something like `#{SFTP_SERVER}`.\\nThe \\\"Remote Path\\\" property must be set to the directory on the FTP Server where the files reside. If the flow being built is to be reused elsewhere,     it's a good idea to parameterize this property by setting it to something like `#{SFTP_REMOTE_PATH}`.\\nConfigure the \\\"Username\\\" property to the appropriate username for logging into the FTP Server. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_USERNAME}`.\\nConfigure the \\\"Password\\\" property to the appropriate password for the provided username. It's usually a good idea to parameterize this property     by setting it to something like `#{SFTP_PASSWORD}`.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchSFTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListSFTP\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"configuration\": \"\\\"Hostname\\\" = \\\"${sftp.remote.host}\\\"\\n\\\"Remote File\\\" = \\\"${path}/${filename}\\\"\\n\\\"Username\\\" = \\\"${sftp.listing.user}\\\"\\n\\\"Password\\\" = \\\"#{SFTP_PASSWORD}\\\"\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.FetchSFTP\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-include-zero-record-results\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                                }\n-                            }\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-                                \"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-                                \"name\": \"failure\"\n+                                \"description\": \"Retrieve all files in a directory of an SFTP Server\",\n+                                \"keywords\": [\n+                                    \"sftp\",\n+                                    \"secure\",\n+                                    \"file\",\n+                                    \"transform\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"put\",\n-                            \"record\",\n-                            \"sink\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Conflict Resolution\": {\n+                            \"Completion 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\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\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\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"Determines how to handle the problem of filename collisions\",\n-                                \"displayName\": \"Conflict Resolution\",\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\": \"Conflict Resolution\",\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@@ -54931,21 +62520,21 @@\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+                                \"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\": true,\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@@ -54965,46 +62554,23 @@\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+                                \"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-                            \"Dot Rename\": {\n-                                \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dot Rename\",\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@@ -55014,15 +62580,15 @@\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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -55063,57 +62629,47 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"Key Exchange Algorithms Allowed\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"name\": \"Move Destination Directory\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Permissions\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n                             \"Port\": {\n                                 \"defaultValue\": \"22\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\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\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -55188,65 +62744,22 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Group\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote Path\",\n-                                \"required\": false,\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Send Keep Alive On Timeout\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n@@ -55287,24 +62800,14 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Temporary Filename\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n                             \"Use Compression\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n@@ -55330,16 +62833,64 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Username\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\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+                                \"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@@ -55348,55 +62899,90 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetSFTP\"\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\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\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\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n-                                \"name\": \"failure\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n+                            \"fetch\",\n                             \"files\",\n-                            \"put\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n                             \"remote\",\n-                            \"sftp\"\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"sftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was used to communicate with the remote SFTP server\",\n+                                \"name\": \"sftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"sftp.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-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n@@ -55413,231 +62999,396 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Batch Size\",\n+                                \"name\": \"Attribute Matching Strategy\",\n                                 \"required\": true,\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+                            \"Filter Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n+                                        \"displayName\": \"Retain\",\n+                                        \"value\": \"Retain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"Remove\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n+                                \"name\": \"Filter Mode\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Obtain Generated Keys\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Filtered Attributes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Filtered Attributes Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                        \"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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Retain\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Use regular expression\\\".\\nSpecify the \\\"Filtered Attributes Pattern\\\", e.g. \\\"my-property|a-prefix[.].*\\\".\\n\",\n+                                \"description\": \"Retain all FlowFile attributes matching a regular expression\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Set \\\"Filter Mode\\\" to \\\"Remove\\\".\\nSet \\\"Attribute Matching Strategy\\\" to \\\"Enumerate attributes\\\".\\nSpecify the set of \\\"Filtered Attributes\\\" using the delimiter comma ',', e.g. \\\"my-property,other,filename\\\".\\n\",\n+                                \"description\": \"Remove only a specified set of FlowFile attributes\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"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+                                \"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\": \"Obtain Generated Keys\",\n-                                \"required\": false,\n+                                \"name\": \"flatten-json-pretty-print-json\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Support Fragmented Transactions\": {\n+                            \"flatten-json-return-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"flatten\",\n+                                        \"value\": \"flatten\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"unflatten\",\n+                                        \"value\": \"unflatten\"\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+                                \"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\": \"Support Fragmented Transactions\",\n-                                \"required\": false,\n+                                \"name\": \"flatten-json-return-type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"Transaction Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"flatten-json-separator\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n+                            \"flatten-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Flattens every objects into a single level json\",\n+                                        \"displayName\": \"normal\",\n+                                        \"value\": \"normal\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putsql-sql-statement\",\n-                                \"required\": false,\n+                                \"name\": \"flatten-mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"ignore-reserved-characters\": {\n                                 \"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+                                \"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\": \"rollback-on-failure\",\n+                                \"name\": \"ignore-reserved-characters\",\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+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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+                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n+                                \"name\": \"success\"\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+                                \"description\": \"Files that cannot be flattened/unflattened go 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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n+                            \"org.apache.nifi.processors.standard.JoinEnrichment\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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-                                \"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\": \"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+                                \"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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"enrich\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"record\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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 role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n+                                \"name\": \"enrichment.role\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -55646,237 +63397,158 @@\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                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch Size\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"fork-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"include-parent-fields\": {\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\": \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"include-parent-fields\",\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+                            \"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\": \"2.0.0-M3\"\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+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n-                                \"name\": \"success\"\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                             {\n-                                \"description\": \"FlowFiles that failed to send to Syslog are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that do not form a valid Syslog message are sent out this relationship.\",\n-                                \"name\": \"invalid\"\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\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"put\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"array\",\n+                            \"content\",\n+                            \"event\",\n+                            \"fork\",\n+                            \"record\",\n+                            \"stream\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\n                         },\n@@ -55884,269 +63556,163 @@\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\": \"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\": \"ENVIRONMENT\",\n+                                \"name\": \"Generated FlowFile attribute name\",\n+                                \"value\": \"Generated FlowFile attribute value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Per FlowFile\": {\n+                            \"Data Format\": {\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\": \"Text\",\n+                                        \"value\": \"Text\"\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+                                \"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\": \"Connection Per FlowFile\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"name\": \"Data Format\",\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+                            \"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\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Outgoing Message Delimiter\": {\n-                                \"dependencies\": [\n+                            \"Unique FlowFiles\": {\n+                                \"allowableValues\": [\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"Unique FlowFiles\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\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+                            \"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\": \"Record Writer\",\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.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"generate-ff-custom-text\",\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+                            \"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\": \"Transmission Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"mime-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\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 that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"\",\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+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"tcp\"\n+                            \"generate\",\n+                            \"load\",\n+                            \"random\",\n+                            \"test\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Count of records transmitted to configured destination address\",\n-                                \"name\": \"record.count.transmitted\"\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-standard-nar\",\n                         \"buildInfo\": {\n@@ -56160,141 +63726,177 @@\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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"name\": \"null-percentage\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"nullable-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"number-of-records\",\n                                 \"required\": true,\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+                            \"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\": \"2.0.0-M3\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n+                                \"name\": \"schema-text\",\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+                                \"description\": \"FlowFiles that are successfully created will be routed 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-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"udp\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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\": \"ENVIRONMENT\",\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n@@ -56314,25 +63916,14 @@\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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                                 \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n@@ -56346,38 +63937,16 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"description\": \"The name of the database table to be queried.\",\n                                 \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -56431,259 +64000,165 @@\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables 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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-column-for-val-partitioning\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-scale\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-custom-orderby-column\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"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+                            \"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\": \"dbf-normalize\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gen-table-fetch-partition-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\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\": \"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\": \"dbf-user-logical-types\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"initial-load-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\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-                                    }\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+                                \"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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"transaction-isolation-level\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n                             \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                            \"org.apache.nifi.processors.standard.ListDatabaseTables\",\n+                            \"org.apache.nifi.processors.standard.QueryDatabaseTable\"\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\": \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n                             \"database\",\n+                            \"fetch\",\n+                            \"generate\",\n                             \"jdbc\",\n                             \"query\",\n                             \"select\",\n                             \"sql\"\n                         ],\n                         \"triggerSerially\": true,\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 Environment/System properties 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.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 Environment/System properties.\\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\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 number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"name\": \"generatetablefetch.tableName\"\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+                                \"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\": \"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+                                \"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\": \"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+                                \"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-                                \"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@@ -56693,464 +64168,502 @@\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\": \"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\": \"ENVIRONMENT\",\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog;\\nset the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; and\\nset the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included.\\nIn order to perform an incremental load of all tables, leave the Catalog, Schema Pattern, and Table Name Pattern unset.\\n\\nLeave the RecordWriter property unset.\\n\\nConnect the 'success' relationship to QueryDatabaseTableRecord.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to \\\"${db.table.fullname}\\\"\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"description\": \"Perform an incremental load of multiple database tables, fetching only new rows as they are added to the tables.\",\n-                                \"keywords\": [\n-                                    \"incremental load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Fetch Size\",\n+                                \"name\": \"Connection Timeout\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Set Auto Commit\": {\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-                                \"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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Set Auto Commit\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delete Original\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\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\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"db-fetch-db-type\",\n+                                \"name\": \"Ignore Dotted Files\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"db-fetch-sql-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\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+                            \"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\": \"Max Selects\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-fetch-where-clause\",\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-                            \"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+                            \"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\": \"Environment variables 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\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+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-scale\",\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+                                \"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\": \"Environment variables 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-                            \"dbf-user-logical-types\": {\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\": \"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+                                \"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\": \"dbf-user-logical-types\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-load-strategy\": {\n+                            \"Transfer Mode\": {\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\": \"Binary\",\n+                                        \"value\": \"Binary\"\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\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\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\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-frags\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Use Natural Ordering\",\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+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-normalize\": {\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\": \"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+                                \"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\": \"qdbtr-normalize\",\n+                                \"name\": \"ftp-use-utf8\",\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+                            \"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\": \"qdbtr-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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ExecuteSQL\",\n-                            \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\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 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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"FTP\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\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 Environment/System properties 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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Beginning\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                \"description\": \"Retrieve all rows from a database table.\",\n-                                \"keywords\": [\n-                                    \"jdbc\",\n-                                    \"rdbms\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n-                                \"description\": \"Perform an incremental load of a single database table, fetching only new rows as they are added to the table.\",\n-                                \"keywords\": [\n-                                    \"incremental load\",\n-                                    \"rdbms\",\n-                                    \"jdbc\",\n-                                    \"cdc\",\n-                                    \"database\",\n-                                    \"table\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n+                        \"type\": \"org.apache.nifi.processors.standard.GetFTP\",\n+                        \"typeDescription\": \"Fetches files from an FTP Server and creates FlowFiles from them\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\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 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\": \"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 date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\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 date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\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 numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\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 numeric group id of the source file\",\n+                                \"name\": \"file.group\"\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 read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n                             },\n                             {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\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+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -57159,523 +64672,267 @@\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\": \"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+                                \"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-                        \"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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"cache-schema\": {\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+                            \"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+                            \"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\": \"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+                                \"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\": \"cache-schema\",\n-                                \"required\": true,\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"name\": \"Ignore Hidden Files\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\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\": \"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+                                \"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\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"Keep Source File\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\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+                            \"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\": \"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\": \"2.0.0-M3\"\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": 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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep. I.e., it is the exact opposite of what we want to remove.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to remove records where either the name is George OR the age is less than 18, we would add a   property named \\\"adults not george\\\" with a value that selects records where the name is not George AND the age is greater than or equal to 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"name\\\" <> 'George' AND \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults not george\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Filter out records based on the values of the records' fields\",\n-                                \"keywords\": [\n-                                    \"filter out\",\n-                                    \"remove\",\n-                                    \"drop\",\n-                                    \"strip out\",\n-                                    \"record field\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only records where the person is an adult (aged 18 or older), add a property named \\\"adults\\\"   with a value that is a SQL statement that selects records where the age is at least 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Keep only specific records\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"retain\",\n-                                    \"select\",\n-                                    \"include\",\n-                                    \"record\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep, such as `relevant fields`.\\nIts value is a SQL statement that selects the desired columns from a table named `FLOW_FILE` for relevant rows.\\nThere is no WHERE clause.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only the `name`, `age`, and `address` fields, add a property named `relevant fields`   with a value of `SELECT \\\"name\\\", \\\"age\\\", \\\"address\\\" FROM FLOWFILE`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the `relevant fields` Relationship should be connected to the next Processor in our flow.\\n\",\n-                                \"description\": \"Keep only specific fields in a a Record, where the names of the fields to keep are known\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"retain\",\n-                                    \"select\",\n-                                    \"include\",\n-                                    \"record\",\n-                                    \"fields\",\n-                                    \"sql\"\n-                                ],\n-                                \"notes\": \"\"\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-                            {\n-                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nFor each route that you want to create, add a new property.\\nThe name of the property should be a short description of the data that should be selected for the route.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE`. The WHERE clause selects the data that should be included in the route.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\n\\nA new outbound relationship is created for each property that is added. The name of the relationship is the same as the property name.\\n\\nFor example, to route data based on whether or not it is a large transaction, we would add two properties:\\n`small transaction` would have a value such as `SELECT * FROM FLOWFILE WHERE transactionTotal < 100`\\n`large transaction` would have a value of `SELECT * FROM FLOWFILE WHERE transactionTotal >= 100`\\n\",\n-                                \"description\": \"Route record-oriented data for processing based on its contents\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"route\",\n-                                    \"conditional processing\",\n-                                    \"field\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\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-                            {\n-                                \"description\": \"The number of records selected by the query\",\n-                                \"name\": \"record.count\"\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-                            {\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\": \"f2215c6\"\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\": \"Any field that matches the RecordPath set as the value will be removed.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A description of the field to remove\",\n-                                \"value\": \"A RecordPath to the field to be removed.\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"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\": \"2.0.0-M3\"\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+                            \"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 or not to pull files from subdirectories\",\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-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"All files are routed to success\",\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                         \"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+                            \"files\",\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.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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Configure the Record Reader according to the incoming data format.\\nConfigure the Record Writer according to the desired output format.\\n\\nFor each field that you want to remove, add a single new property to the Processor.\\nThe name of the property can be anything but it's recommended to use a brief description of the field.\\nThe value of the property is a RecordPath that matches the field to remove.\\n\\nFor example, to remove the `name` and `email` fields, add two Properties:\\n`name` = `/name`\\n`email` = `/email`\\n\",\n-                                \"description\": \"Remove one or more fields from a Record, where the names of the fields to remove are known.\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"field\",\n-                                    \"drop\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expunge\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                                \"description\": \"The filename is set to the name of the file on disk\",\n+                                \"name\": \"filename\"\n+                            },\n                             {\n-                                \"description\": \"Allows users to specify a new name for each field that matches the RecordPath.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A RecordPath that identifies which field(s) to update\",\n-                                \"value\": \"The new name to assign to the Record field\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\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-                                \"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\": \"2.0.0-M3\"\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-                            \"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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.RemoveRecordField\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\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\": \"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-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"field\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"rename\",\n-                            \"schema\",\n-                            \"update\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.RenameRecordField\",\n-                        \"typeDescription\": \"Renames one or more fields in each Record of a FlowFile. 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 the new name to assign to the Record Field that matches the RecordPath. The property value may use Expression Language to reference FlowFile attributes as well as the variables `field.name`, `field.value`, `field.type`, and `record.index`\",\n-                        \"useCases\": [\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-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is the new name of the property.\\n\\nFor example, to rename the `name` field to `full_name`, add a property with a name of `/name` and a value of `full_name`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a specific, known name.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"static\",\n-                                    \"specific\",\n-                                    \"name\"\n-                                ],\n-                                \"notes\": \"\"\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-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that can be used to determine the new name of the field.\\n\\nFor example, to rename the `addr` field to whatever value is stored in the `preferred_address_name` attribute, add a property with a name of `/name` and a value of `${preferred_address_name}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a name that is derived from a FlowFile attribute.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"expression language\",\n-                                    \"EL\",\n-                                    \"flowfile\",\n-                                    \"attribute\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that references the `field.name` property.\\n\\nFor example, to rename all fields with a prefix of `pre_`, we add a property named `/*` and a value of `pre_${field.name}`. If we would like this to happen recursively, to nested fields as well, we use a property name of `//*` with the value of `pre_${field.name}`.\\n\\nTo make all field names uppercase, we can add a property named `//*` with a value of `${field.name:toUpper()}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n-                                \"description\": \"Rename a field in each Record to a new name that is derived from the current field name.\",\n-                                \"keywords\": [\n-                                    \"rename\",\n-                                    \"field\",\n-                                    \"expression language\",\n-                                    \"EL\",\n-                                    \"field.name\"\n-                                ],\n-                                \"notes\": \"This might be used, for example, to add a prefix or a suffix to some fields, or to transform the name of the field by making it uppercase.\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The group owner of the file. May not work on all file systems\",\n+                                \"name\": \"file.group\"\n+                            },\n                             {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\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\": \"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\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -57690,804 +64947,564 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Character Set\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Evaluation Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Line-by-Line\",\n-                                        \"value\": \"Line-by-Line\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Entire text\",\n-                                        \"value\": \"Entire text\"\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+                            \"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\": \"Evaluation Mode\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line-by-Line Evaluation Mode\": {\n+                            \"Delete Original\": {\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\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Except-Last-Line\",\n-                                        \"value\": \"Except-Last-Line\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"Line-by-Line Evaluation Mode\",\n+                                \"name\": \"Delete Original\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\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+                            \"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\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"Host Key File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Replacement Strategy\": {\n+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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+                                \"name\": \"Ignore Dotted Files\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Replacement Value\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Text to Append\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Text to Prepend\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Selects\",\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                            \"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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Append\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be appended to the line.\\nFor example, to insert the text `<fin>` at the end of every line, we would set \\\"Replacement Value\\\" to `<fin>`.\\nWe can also use Expression Language. So to insert the filename at the end of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n-                                \"description\": \"Append text to the end of every line in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"raw text\",\n-                                    \"append\",\n-                                    \"line\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Prepend\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be prepended to the line.\\nFor example, to insert the text `<start>` at the beginning of every line, we would set \\\"Replacement Value\\\" to `<start>`.\\nWe can also use Expression Language. So to insert the filename at the beginning of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n-                                \"description\": \"Prepend text to the beginning of every line in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"raw text\",\n-                                    \"prepend\",\n-                                    \"line\"\n-                                ],\n-                                \"notes\": \"\"\n                             },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Literal Replace\\\"\\n\\\"Search Value\\\" is set to whatever text is in the FlowFile that needs to be replaced.\\n\\\"Replacement Value\\\" is set to the text that should replace the current text.\\n\\nFor example, to replace the word \\\"spider\\\" with \\\"arachnid\\\" we set \\\"Search Value\\\" to `spider` and set \\\"Replacement Value\\\" to `arachnid`.\\n\",\n-                                \"description\": \"Replace every occurrence of a literal string in the FlowFile with a different value\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"string\",\n-                                    \"text\",\n-                                    \"literal\"\n-                                ],\n-                                \"notes\": \"\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Regex Replace\\\"\\n\\\"Search Value\\\" is set to a regular expression that matches the text that should be transformed in a capturing group.\\n\\\"Replacement Value\\\" is set to a NiFi Expression Language expression that references `$1` (in quotes to escape the reference name).\\n\\nFor example, if we wanted to lowercase any occurrence of WOLF, TIGER, or LION, we would use a \\\"Search Value\\\" of `(WOLF|TIGER|LION)` and a \\\"Replacement Value\\\" of `${'$1':toLower()}`.\\nIf we want to replace any identifier with a hash of that identifier, we might use a \\\"Search Value\\\" of `identifier: (.*)` and a \\\"Replacement Value\\\" of `identifier: ${'$1':hash('sha256')}`\\n\",\n-                                \"description\": \"Transform every occurrence of a literal string in a FlowFile\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"transform\",\n-                                    \"raw text\"\n-                                ],\n-                                \"notes\": \"\"\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Entire text\\\"\\n\\\"Replacement Strategy\\\" = \\\"Always Replace\\\"\\n\\n\\\"Replacement Value\\\" is set to the new text that should be written to the FlowFile. This text might include NiFi Expression Language to reference one or more attributes.\\n\",\n-                                \"description\": \"Completely replace the contents of a FlowFile to a specific text\",\n-                                \"keywords\": [\n-                                    \"replace\",\n-                                    \"raw text\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Path Filter Regex\",\n+                                \"required\": false,\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+                            \"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\": \"Mapping File\",\n+                                \"name\": \"Polling Interval\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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-                            \"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+                            \"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\": \"Mapping File Refresh Interval\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Matching Group\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\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+                            \"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\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\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-                        },\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Fail on Non-numerical Overwrite\": {\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 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+                                \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-retries\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"penalize-retries\": {\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\": \"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+                                \"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\": \"penalize-retries\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"retry-attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reuse-mode\": {\n+                            \"Use Compression\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"reuse-mode\",\n+                                \"name\": \"Use Compression\",\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-                            {\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-                            {\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-                        \"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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n-                                \"name\": \"Retry Attribute\"\n                             },\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\": \"f2215c6\"\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\": \"Routes FlowFiles whose attributes match the 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\": \"Expression Language expression that returns a boolean value indicating whether or not the FlowFile should be routed to this Relationship\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria to route on. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise. This adds a new attribute to the FlowFile whose name is equal to the property name.\\n\\nConnect the 'success' Relationship to RouteOnAttribute.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"configuration\": \"Set \\\"Routing Strategy\\\" to \\\"Route to Property name\\\"\\n\\nAdd two additional properties. For the first one, the name of the property should describe data that matches the criteria. The value is an Expression Language expression that checks if the attribute added by the PartitionRecord processor has a value of `true`. For example, `${criteria:equals('true')}`.\\nThe second property should have a name that describes data that does not match the criteria. The value is an Expression Language that evaluates to the opposite of the first property value. For example, `${criteria:equals('true'):not()}`.\\n\\nConnect each of the newly created Relationships to the appropriate downstream processors.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Route record-oriented data based on whether or not the record's values meet some criteria\",\n-                                \"keywords\": [\n-                                    \"record\",\n-                                    \"route\",\n-                                    \"content\",\n-                                    \"data\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Routing Strategy\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"follow-symlink\": {\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-                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"Routing Strategy\",\n+                                \"name\": \"follow-symlink\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n-                                \"name\": \"unmatched\"\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\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                            \"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.standard.RouteOnAttribute\",\n-                        \"typeDescription\": \"Routes FlowFiles based on their Attributes using the Attribute Expression Language\",\n-                        \"useCases\": [\n+                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n+                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"Set the \\\"Routing Strategy\\\" property to \\\"Route to Property name\\\".\\nFor each route that a FlowFile might be routed to, add a new property. The name of the property should describe the route.\\nThe value of the property is an Attribute Expression Language expression that returns a boolean value indicating whether or not a given FlowFile will be routed to the associated relationship.\\n\\nFor example, we might route data based on its file extension using the following properties:\\n    - \\\"Routing Strategy\\\" = \\\"Route to Property Name\\\"\\n    - \\\"jpg\\\" = \\\"${filename:endsWith('.jpg')}\\\"\\n    - \\\"png\\\" = \\\"${filename:endsWith('.png')}\\\"\\n    - \\\"pdf\\\" = \\\"${filename:endsWith('.pdf')}\\\"\\n\\nThe Processor will now have 3 relationships: `jpg`, `png`, and `pdf`. Each of these should be connected to the appropriate downstream processor.\\n\",\n-                                \"description\": \"Route data to one or more relationships based on its attributes using the NiFi Expression Language.\",\n-                                \"keywords\": [\n-                                    \"attributes\",\n-                                    \"routing\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to keep the data.\\nIf the data should be kept in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to keep the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nFor example, to keep files whose filename ends with .txt and have a file size of at least 1000 bytes, we will use the following properties:\\n    - \\\"ends_with_txt\\\" = \\\"${filename:endsWith('.txt')}\\\"\\n    - \\\"large_enough\\\" = \\\"${fileSize:ge(1000)}\\n    - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'unmatched' relationship.\\nConnect the 'matched' relationship to the next processor in the flow.\\n\",\n-                                \"description\": \"Keep data only if its attributes meet some criteria, such as its filename ends with .txt.\",\n-                                \"keywords\": [\n-                                    \"keep\",\n-                                    \"filter\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\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-                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to drop the data.\\nIf the data should be dropped in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to drop the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nHere are a couple of examples for configuring the properties:\\n    Example 1 Use Case: Data should be dropped if its \\\"uuid\\\" attribute has an 'a' in it or ends with '0'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_0\\\" = \\\"${uuid:endsWith('0')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if any matches\\\"\\n    Example 2 Use Case: Data should be dropped if its 'uuid' attribute has an 'a' AND it ends with a '1'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_1\\\" = \\\"${uuid:endsWith('1')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'matched' relationship.\\nConnect the 'unmatched' relationship to the next processor in the flow.\\n\",\n-                                \"description\": \"Discard or drop a file based on attributes, such as filename.\",\n-                                \"keywords\": [\n-                                    \"discard\",\n-                                    \"drop\",\n-                                    \"filter\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n                             {\n-                                \"description\": \"The relation to which the FlowFile was routed\",\n-                                \"name\": \"RouteOnAttribute.Route\"\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\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -58496,1212 +65513,512 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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 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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Additional HTTP Methods\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Buffer Size\",\n+                                \"name\": \"Allow DELETE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Requirement\": {\n+                            \"Allow GET\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"content must match exactly\",\n-                                        \"value\": \"content must match exactly\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"content must contain match\",\n-                                        \"value\": \"content must contain match\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": 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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"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-                        \"multiProcessorUseCases\": [],\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP GET Method\",\n+                                \"displayName\": \"Allow GET\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"Allow GET\",\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+                            \"Allow HEAD\": {\n+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Regular Expression\",\n-                                \"required\": false,\n+                                \"name\": \"Allow HEAD\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Case\": {\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\": \"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\": \"Allow HTTP OPTIONS Method\",\n+                                \"displayName\": \"Allow OPTIONS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Case\",\n+                                \"name\": \"Allow OPTIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Leading/Trailing Whitespace\": {\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\": \"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+                                \"description\": \"Allow HTTP POST Method\",\n+                                \"displayName\": \"Allow POST\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n+                                \"name\": \"Allow POST\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Matching Strategy\": {\n+                            \"Allow PUT\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n-                                \"displayName\": \"Matching Strategy\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP PUT Method\",\n+                                \"displayName\": \"Allow PUT\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Matching Strategy\",\n+                                \"name\": \"Allow PUT\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Routing Strategy\": {\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allowed Paths\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Authentication\": {\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+                                        \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"Routing Strategy\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\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-                            },\n-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\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-                        ],\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Matches Regular Expression\\\"\\n\\\"Empty Line\\\" = \\\"^$\\\"\\n\\nAuto-terminate the \\\"Empty Line\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n-                                \"description\": \"Drop blank or empty lines from the FlowFile's content.\",\n-                                \"keywords\": [\n-                                    \"filter\",\n-                                    \"drop\",\n-                                    \"empty\",\n-                                    \"blank\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"strip out\",\n-                                    \"lines\",\n-                                    \"text\"\n-                                ],\n-                                \"notes\": \"\"\n                             },\n-                            {\n-                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Satisfies Expression\\\"\\n\\nAn additional property should be added named \\\"Filter Out.\\\" The value should be a NiFi Expression Language Expression that can refer to two variables (in addition to FlowFile attributes): `line`, which is the line of text being evaluated; and `lineNo`, which is the line number in the file (starting with 1). The Expression should return `true` for any line that should be dropped.\\n\\nFor example, to remove any line that starts with a # symbol, we can set \\\"Filter Out\\\" to `${line:startsWith(\\\"#\\\")}`.\\nWe could also remove the first 2 lines of text by setting \\\"Filter Out\\\" to `${lineNo:le(2)}`. Note that we use the `le` function because we want lines numbers less than or equal to `2`, since the line index is 1-based.\\n\\nAuto-terminate the \\\"Filter Out\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n-                                \"description\": \"Remove specific lines of text from a file, such as those containing a specific word or having a line length over some threshold.\",\n-                                \"keywords\": [\n-                                    \"filter\",\n-                                    \"drop\",\n-                                    \"empty\",\n-                                    \"blank\",\n-                                    \"remove\",\n-                                    \"delete\",\n-                                    \"strip out\",\n-                                    \"lines\",\n-                                    \"text\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n-                                \"name\": \"RouteText.Route\"\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-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"Default URL 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.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M3\"\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+                            \"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\": \"record-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"sample-record-interval\": {\n-                                \"dependencies\": [\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"interval\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\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-                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sample-record-probability\": {\n+                                \"defaultValue\": \"HTTP_1_1\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\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+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-probability\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-random-seed\": {\n-                                \"dependencies\": [\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+                            \"Hostname\": {\n+                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-random-seed\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-range\",\n-                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-reservoir\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\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+                            \"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\": \"sample-record-sampling-strategy\",\n+                                \"name\": \"Maximum Threads\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                        ],\n-                        \"triggerSerially\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Attribute Pattern\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Dictionary Filter Pattern\",\n-                                \"required\": false,\n+                                \"name\": \"container-queue-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"Match Criteria\",\n+                                \"name\": \"multipart-read-buffer-size\",\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-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Dictionary Encoding\",\n+                                \"name\": \"multipart-request-max-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"The filename of the terms dictionary\",\n-                                \"displayName\": \"Dictionary File\",\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\": \"Dictionary File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"parameters-to-attributes\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"sideEffectFree\": false,\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-                                \"description\": \"FlowFiles that match at least one term in the dictionary are routed to this relationship\",\n-                                \"name\": \"matched\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aho-corasick\",\n-                            \"byte sequence\",\n-                            \"content\",\n-                            \"dictionary\",\n-                            \"find\",\n-                            \"scan\",\n-                            \"search\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Segment Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\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\": \"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+                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n+                                \"name\": \"mime.type\"\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n+                                \"name\": \"http.servlet.path\"\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+                                \"description\": \"The part of the request URL that is considered to be the Context Path\",\n+                                \"name\": \"http.context.path\"\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+                                \"description\": \"The HTTP Method that was used for the request, such as GET or POST\",\n+                                \"name\": \"http.method\"\n                             },\n                             {\n-                                \"description\": \"The number of segments generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"IP address/hostname of the server\",\n+                                \"name\": \"http.local.name\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n+                                \"description\": \"Listening port of the server\",\n+                                \"name\": \"http.server.port\"\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The query string portion of the Request URL\",\n+                                \"name\": \"http.query.string\"\n                             },\n-                            \"Byte Sequence Format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n-                                    }\n-                                ],\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\": \"Byte Sequence Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The hostname of the requestor\",\n+                                \"name\": \"http.remote.host\"\n                             },\n-                            \"Byte Sequence Location\": {\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-                                    },\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-                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Byte Sequence Location\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The hostname:port combination of the requestor\",\n+                                \"name\": \"http.remote.addr\"\n                             },\n-                            \"Keep Byte Sequence\": {\n-                                \"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-                                \"dynamic\": false,\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 Splits will be routed to the splits relationship\",\n-                                \"name\": \"splits\"\n+                                \"description\": \"The username of the requestor\",\n+                                \"name\": \"http.remote.user\"\n                             },\n                             {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n+                                \"description\": \"The protocol used to communicate\",\n+                                \"name\": \"http.protocol\"\n+                            },\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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The full Request URL\",\n+                                \"name\": \"http.request.uri\"\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 type of HTTP Authorization used\",\n+                                \"name\": \"http.auth.type\"\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 name of the authenticated user making the request\",\n+                                \"name\": \"http.principal.name\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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\": \"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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JsonPath Expression\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                            \"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+                                \"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-                            \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\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 JSON or the specified path does not exist), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\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\": \"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\": \"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\": \"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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\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\": \"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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\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\": \"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\": \"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\": \"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\": \"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\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\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\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -59710,133 +66027,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_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n+                                \"required\": false,\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+                            \"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\": \"Record Writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Records Per Split\",\n+                                \"name\": \"HTTP Status Code\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\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\": \"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\": \"The individual 'segments' of the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"splits\"\n+                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n+                                \"name\": \"http.request.uri\"\n                             },\n                             {\n-                                \"description\": \"Upon successfully splitting an input FlowFile, the original FlowFile will be sent to this relationship.\",\n-                                \"name\": \"original\"\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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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+                            \"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.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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -59850,146 +66164,150 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"config-body\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\n+                                    }\n+                                ],\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\": \"Header Line Count\",\n-                                \"required\": true,\n+                                \"name\": \"config-body\",\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+                            \"config-file\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\n+                                    }\n+                                ],\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Line Marker Characters\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"config-file\",\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+                            \"config-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Use default NiFi MIME Types.\",\n+                                        \"displayName\": \"Preset\",\n+                                        \"value\": \"Preset\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use config MIME Types only.\",\n+                                        \"displayName\": \"Replace\",\n+                                        \"value\": \"Replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Use config together with default NiFi MIME Types.\",\n+                                        \"displayName\": \"Merge\",\n+                                        \"value\": \"Merge\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Preset\",\n+                                \"description\": \"Select the loading strategy for MIME Type configuration to be used.\",\n+                                \"displayName\": \"Config Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Line Split Count\",\n+                                \"name\": \"config-strategy\",\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+                            \"use-filename-in-detection\": {\n                                 \"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 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+                                \"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\": \"Remove Trailing Newlines\",\n+                                \"name\": \"use-filename-in-detection\",\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-                            {\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+                                \"description\": \"All FlowFiles are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\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+                            \"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.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+                        \"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.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\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-standard-nar\",\n                         \"buildInfo\": {\n@@ -60003,570 +66321,769 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n+                                \"displayName\": \"Connection Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Depth\",\n+                                \"name\": \"Connection Timeout\",\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-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP Method\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                            \"HTTP 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                            {\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"File Location\": {\n+                            \"HTTP/2 Disabled\": {\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\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\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\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\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\": \"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\": \"File Location\",\n+                                \"name\": \"HTTP/2 Disabled\",\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+                            \"Request Body 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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"File to Tail\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Body Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Start Position\": {\n+                            \"Request Chunked Transfer-Encoding Enabled\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\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+                                \"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\": \"Initial Start Position\",\n+                                \"name\": \"Request Chunked Transfer-Encoding Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Start Pattern\": {\n+                            \"Request 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-                                            \"Single file\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Tailing mode\",\n-                                        \"propertyName\": \"tail-mode\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\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+                                \"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\": \"Line Start Pattern\",\n-                                \"required\": false,\n+                                \"name\": \"Request Content-Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"64 KB\",\n+                            \"Request Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Line Start Pattern\",\n-                                        \"propertyName\": \"Line Start Pattern\"\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\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+                                \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request Content-Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Request Date Header 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\": \"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\": \"Max Buffer Size\",\n+                                \"name\": \"Request Date Header Enabled\",\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+                            \"Request Digest Authentication 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\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Request Username\",\n+                                        \"propertyName\": \"Request 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\": \"Post-Rollover Tail Period\",\n+                                \"name\": \"Request Digest Authentication Enabled\",\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+                            \"Request Failure Penalization 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\": \"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\": \"Rolling Filename Pattern\",\n+                                \"name\": \"Request Failure Penalization Enabled\",\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+                            \"Request Header Attributes Pattern\": {\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\": \"pre-allocated-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"Request Header Attributes Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"reread-on-nul\": {\n+                            \"Request Multipart Form-Data Filename 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\": \"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+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n+                                        \"propertyName\": \"Request Multipart Form-Data 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\": \"reread-on-nul\",\n+                                \"name\": \"Request Multipart Form-Data Filename Enabled\",\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+                            \"Request Multipart Form-Data Name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Request Body Enabled\",\n+                                        \"propertyName\": \"Request Body Enabled\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"tail-base-directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request Multipart Form-Data Name\",\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+                            \"Request 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\": \"tail-mode\",\n-                                \"required\": true,\n+                                \"name\": \"Request 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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Request 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\": \"Request Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Request User-Agent\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request User-Agent\",\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+                            \"Request 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\": \"tailfile-lookup-frequency\",\n+                                \"name\": \"Request Username\",\n                                 \"required\": false,\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+                            \"Response Body Attribute Name\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Response Body Attribute Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Body Attribute Size\": {\n+                                \"defaultValue\": \"256\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Response Body Attribute Name\",\n+                                        \"propertyName\": \"Response Body Attribute Name\"\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\": \"tailfile-maximum-age\",\n+                                \"name\": \"Response Body Attribute Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"tailfile-recursive-lookup\": {\n+                            \"Response Body Ignored\": {\n                                 \"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+                                \"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\": \"tailfile-recursive-lookup\",\n+                                \"name\": \"Response Body Ignored\",\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\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-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"file\",\n-                            \"log\",\n-                            \"source\",\n-                            \"tail\",\n-                            \"text\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\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\": \"f2215c6\"\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 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-                        \"multiProcessorUseCases\": [],\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+                            },\n+                            \"Response Cache 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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"XSLT file name\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Cache Enabled\",\n+                                \"required\": true,\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+                            \"Response Cache Size\": {\n+                                \"defaultValue\": \"10MB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n+                                        \"propertyName\": \"Response Cache Enabled\"\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\": \"cache-size\",\n+                                \"name\": \"Response Cache Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"Response 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\": \"cache-ttl-after-last-access\",\n+                                \"name\": \"Response Cookie Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"indent-output\": {\n+                            \"Response FlowFile 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\": \"Response FlowFile Naming Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Generation Required\": {\n                                 \"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 indent the output.\",\n-                                \"displayName\": \"Indent\",\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\": \"indent-output\",\n-                                \"required\": true,\n+                                \"name\": \"Response Generation Required\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"secure-processing\": {\n+                            \"Response Header Request Attributes 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 or not to mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n-                                \"displayName\": \"Secure processing\",\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\": \"secure-processing\",\n+                                \"name\": \"Response Header Request Attributes Enabled\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Redirects 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\": \"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\": \"Response Redirects Enabled\",\n                                 \"required\": true,\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+                            \"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\": \"xslt-controller\",\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.lookup.StringLookupService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"Socket 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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"xslt-controller-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Socket Idle Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Socket 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\": \"Socket Idle Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Socket 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\": \"Socket Read Timeout\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Socket Write 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+                                \"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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\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\": \"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+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Response\"\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 socket communication errors.\",\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"transform\",\n-                            \"xml\",\n-                            \"xslt\"\n+                            \"client\",\n+                            \"http\",\n+                            \"https\",\n+                            \"rest\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n-                        \"additionalDetails\": false,\n+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -60580,231 +67097,256 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"File Filter\",\n+                                \"name\": \"Enrichment 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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Filename Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n+                            \"Insertion Record Path\": {\n+                                \"defaultValue\": \"/\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"zip\",\n-                                            \"use mime.type attribute\"\n+                                            \"Insert Enrichment Fields\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"If supplied this character set will be supplied to the Zip utility to attempt to decode filenames using the specific character set. If not specified the default platform character set will be used. This is useful if a Zip was created with a different character set than the platform default and the zip uses non standard values to specify.\",\n-                                \"displayName\": \"Filename Character Set\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Filename Character Set\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Insertion Record Path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Packaging Format\": {\n+                            \"Join Strategy\": {\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+                                        \"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\": \"flowfile-stream-v2\",\n-                                        \"value\": \"flowfile-stream-v2\"\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\": \"\",\n-                                        \"displayName\": \"flowfile-tar-v1\",\n-                                        \"value\": \"flowfile-tar-v1\"\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-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The Packaging Format used to create the file\",\n-                                \"displayName\": \"Packaging Format\",\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\": \"Packaging Format\",\n+                                \"name\": \"Join Strategy\",\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+                            \"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\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"allow-stored-entries-wdd\": {\n-                                \"allowableValues\": [\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"SQL\": {\n+                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-precision\": {\n+                                \"defaultValue\": \"10\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"SQL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"zip\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\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+                                \"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\": \"allow-stored-entries-wdd\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": false,\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+                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n-                                \"name\": \"original\"\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 original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\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\": \"Unpacked FlowFiles are sent to this relationship\",\n-                                \"name\": \"success\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"Unpack\",\n-                            \"archive\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"tar\",\n-                            \"un-merge\",\n-                            \"zip\"\n+                            \"combine\",\n+                            \"enrichment\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"sql\",\n+                            \"streams\",\n+                            \"wrap\"\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-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Packaging Format\\\" value to \\\"zip\\\" or \\\"use mime.type attribute\\\".\\nSet \\\"Filename Character Set\\\" value to \\\"Cp437\\\" or \\\"IBM437\\\".\\n\",\n-                                \"description\": \"Unpack Zip containing filenames with special characters, created on Windows with filename charset 'Cp437' or 'IBM437'.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\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+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -60814,643 +67356,814 @@\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\nLeave the RecordWriter property unset.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog; leave it empty to include all catalogs.\\nSet the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; leave it empty to include all Schemas.\\nSet the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included; leave it empty to include all Tables.\\n\\nConnect the \\\"success\\\" relationship to GenerateTableFetch.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to match the appropriate value for your RDBMS vendor.\\nSet \\\"Table Name\\\" to `${db.table.fullname}`\\nLeave the RecordWriter property unset.\\n\\nConnect the \\\"success\\\" relationship to ExecuteSQLRecord.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.GenerateTableFetch\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify the same Connection Pool that was used in ListDatabaseTables.\\nConfigure the \\\"Record Writer\\\" property to specify a Record Writer that is appropriate for the desired output data type.\\nLeave the \\\"SQL select query\\\" unset.\\n\\nConnect the \\\"success\\\" relationship to the next Processor in the flow.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ExecuteSQLRecord\"\n+                                    }\n+                                ],\n+                                \"description\": \"Perform a full load of a database, retrieving all rows from all tables, or a specific set of tables.\",\n+                                \"keywords\": [\n+                                    \"full load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"database\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"counter-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-include-count\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"delta\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-types\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The name of the counter to update/get.\",\n-                                \"name\": \"counterName\"\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\": \"Counter was updated/retrieved\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"counter\",\n-                            \"debug\",\n-                            \"instrumentation\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"db-type\": {\n+                            \"Connection Mode\": {\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\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\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\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n+                                \"name\": \"Connection Mode\",\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+                            \"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\": \"record-reader\",\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+                            \"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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-catalog-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-create-table\": {\n+                            \"Hostname\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\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\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"updatedatabasetable-create-table\",\n+                                \"name\": \"Ignore Dotted Files\",\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+                            \"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\": \"updatedatabasetable-dbcp-service\",\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-primary-keys\": {\n-                                \"dependencies\": [\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Create If Not Exists\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Create Table Strategy\",\n-                                        \"propertyName\": \"updatedatabasetable-create-table\"\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-                                \"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+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-primary-keys\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-query-timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"updatedatabasetable-quoted-column-identifiers\": {\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\": \"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+                                \"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\": \"updatedatabasetable-quoted-column-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Search Recursively\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-table-identifiers\": {\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\": \"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+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-record-writer\": {\n-                                \"dependencies\": [\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"et-initial-listing-target\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Update Field Names\",\n-                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\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-                                \"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+                                \"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\": \"updatedatabasetable-record-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-schema-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"updatedatabasetable-translate-field-names\": {\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\": \"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\": \"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\": \"updatedatabasetable-translate-field-names\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-update-field-names\": {\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\": \"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+                                \"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\": \"updatedatabasetable-update-field-names\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                                \"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-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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 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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"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: 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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\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\": 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.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Replacement Value Strategy\": {\n+                            \"target-system-timestamp-precision\": {\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+                                        \"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\": \"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+                                        \"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\": \"literal-value\",\n-                                \"description\": \"Specifies how to interpret the configured replacement values\",\n-                                \"displayName\": \"Replacement Value Strategy\",\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\": \"Replacement Value Strategy\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                            \"org.apache.nifi.processors.standard.FetchFTP\",\n+                            \"org.apache.nifi.processors.standard.GetFTP\",\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\n                         ],\n-                        \"sideEffectFree\": true,\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 that are successfully transformed 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 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                         \"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+                            \"files\",\n+                            \"ftp\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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-                        \"useCases\": [\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property uses the CONCAT Record Path function to concatenate multiple values together, potentially using other string literal values.\\nFor example, to combine the `title`, `firstName` and `lastName` fields into a single field named `fullName`, we add a property with the name `/fullName` and a value of `CONCAT(/title, ' ', /firstName, ' ', /lastName)`\\n\",\n-                                \"description\": \"Combine multiple fields into a single field.\",\n-                                \"keywords\": [\n-                                    \"combine\",\n-                                    \"concatenate\",\n-                                    \"recordpath\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The hostname of the FTP Server\",\n+                                \"name\": \"ftp.remote.host\"\n                             },\n                             {\n-                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\n    The value of the property is the explicit value to set the field to. For example, we can set any field with a name of `txId`, regardless of its level in the data's hierarchy,     to `1111-1111` by adding a property with a name of `//txId` and a value of `1111-1111`\\n\",\n-                                \"description\": \"Change the value of a record field to an explicit value.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The port that was connected to on the FTP Server\",\n+                                \"name\": \"ftp.remote.port\"\n                             },\n                             {\n-                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\n    The value of the property is a RecordPath identifying the field to copy the value from.\\n    For example, we can copy the value of `/identifiers/all/imei` to the `identifier` field at the root level, by adding a property named     `/identifier` with a value of `/identifiers/all/imei`.\\n\",\n-                                \"description\": \"Copy the value of one record field to another record field.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"copy\",\n-                                    \"recordpath\",\n-                                    \"hierarchy\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The username of the user that performed the FTP Listing\",\n+                                \"name\": \"ftp.listing.user\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property is an Expression Language expression that references the attribute of interest. We can, for example, insert a new field name `filename` into each record by adding a property named `/filename` with a value of `${filename}`\\n\",\n-                                \"description\": \"Enrich data by injecting the value of an attribute into each Record.\",\n-                                \"keywords\": [\n-                                    \"enrich\",\n-                                    \"attribute\",\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"insert\",\n-                                    \"transform\"\n-                                ],\n-                                \"notes\": \"\"\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n                             },\n                             {\n-                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\nThe value is an Expression Language expression that references the `field.value` variable. For example, to change the date/time format of a field named `txDate` from `year-month-day` format to `month/day/year` format, we add a property named `/txDate` with a value of `${field.value:toDate('yyyy-MM-dd'):format('MM/dd/yyyy')}`. We could also change the timezone of a timestamp field (and insert the timezone for clarity) by using a value of `${field.value:toDate('yyyy-MM-dd HH:mm:ss', 'UTC-0400'):format('yyyy-MM-dd HH:mm:ss Z', 'UTC')}`.\\n\",\n-                                \"description\": \"Change the format of a record field's value.\",\n-                                \"keywords\": [\n-                                    \"change\",\n-                                    \"update\",\n-                                    \"replace\",\n-                                    \"insert\",\n-                                    \"transform\",\n-                                    \"format\",\n-                                    \"date/time\",\n-                                    \"timezone\",\n-                                    \"expression language\"\n-                                ],\n-                                \"notes\": \"Use the RenameRecordField Processor in order to change a field's name.\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n                             {\n-                                \"description\": \"This attribute provides the current row index and is only available inside the literal value expression.\",\n-                                \"name\": \"record.index\"\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\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 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\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n@@ -61460,678 +68173,1177 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-delimiter\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter\",\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+                            \"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\": \"Indicates whether or not hidden files should be ignored\",\n+                                \"displayName\": \"Ignore Hidden Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-eol\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-header\": {\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\": \"true\",\n-                                \"description\": \"True if the incoming flow file contains a header to ignore, false otherwise.\",\n-                                \"displayName\": \"Header\",\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\": \"validate-csv-header\",\n+                                \"name\": \"Include File Attributes\",\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+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which files to pull files\",\n+                                \"displayName\": \"Input Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-quote\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Input Directory\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-schema\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Directory Location\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-strategy\": {\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+                                \"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+                            \"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+                            \"Recurse Subdirectories\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FlowFile validation\",\n-                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n-                                \"displayName\": \"Validation strategy\",\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\": \"validate-csv-strategy\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-violations\": {\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-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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-node-identifier\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\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 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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-listing-time\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-operation-time\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"max-performance-metrics\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"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+                                \"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\": \"validate-csv-violations\",\n+                                \"name\": \"track-performance\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": 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+                        ],\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 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+                                \"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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"csv\",\n-                            \"schema\",\n-                            \"validation\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n-                                \"name\": \"count.invalid.lines\"\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\": \"If line by line validation, total number of lines in the source data\",\n-                                \"name\": \"count.total.lines\"\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\": \"For flow files routed to invalid, message of the first validation error\",\n-                                \"name\": \"validation.error.message\"\n+                                \"description\": \"The user that owns the file in filesystem\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The group that owns the file in filesystem\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the file in filesystem\",\n+                                \"name\": \"file.size\"\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+                            },\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+                            },\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+                            },\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+                        \"additionalDetails\": true,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"JSON Schema\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\",\n-                                        \"URL\"\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+                            \"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\": \"JSON Schema Registry\",\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.schemaregistry.services.JsonSchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"JSON Schema Version\": {\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+                                \"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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ignore Dotted Files\": {\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\": \"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\": \"JSON Schema Version\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Access Strategy\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\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\": \"Environment variables 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\": \"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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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 JSON Schema Registry Service.\",\n-                                        \"displayName\": \"Schema Name Property\",\n-                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\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\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\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\": \"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\": \"Schema Access Strategy\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"Schema Name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"Search Recursively\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_NAME_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\": \"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 from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Schema Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n-                                \"name\": \"failure\"\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 are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"allow-extra-fields\": {\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\": \"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+                                \"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\": \"allow-extra-fields\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"coerce-types\": {\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\": \"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+                                \"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\": \"coerce-types\",\n+                                \"name\": \"Strict Host Key Checking\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum-validation-details-length\",\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+                                \"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-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\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\": \"record-reader\",\n-                                \"required\": true,\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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"record-writer\",\n+                                \"name\": \"follow-symlink\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"listing-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+                                        \"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 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\": \"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 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\": \"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\": \"reader-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n-                                \"displayName\": \"Schema Access Strategy\",\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\": \"schema-access-strategy\",\n+                                \"name\": \"listing-strategy\",\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\": \"Environment variables 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+                            \"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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"strict-type-checking\": {\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 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+                                \"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\": \"strict-type-checking\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validation-details-attribute-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"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+                                \"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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"schema\",\n-                            \"validate\"\n+                            \"files\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"list\",\n+                            \"remote\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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 hostname of the SFTP Server\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The port that was connected to on the SFTP Server\",\n+                                \"name\": \"sftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the SFTP Listing\",\n+                                \"name\": \"sftp.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 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-standard-nar\",\n                         \"buildInfo\": {\n@@ -62145,101 +69357,118 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema File\",\n+                                \"name\": \"bind-address\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"XML Source Attribute\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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-                            {\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+                                \"description\": \"Relationship for successfully received files.\",\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                         \"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+                            \"FTP\",\n+                            \"FTPS\",\n+                            \"ingest\",\n+                            \"listen\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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                     {\n-                        \"additionalDetails\": true,\n+                        \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n@@ -62249,670 +69478,526 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\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-                                    {\n-                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\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+                            \"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\": \"attribute-copy-mode\",\n+                                \"name\": \"Authorized DN Pattern\",\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+                            \"Base Path\": {\n+                                \"defaultValue\": \"contentListener\",\n+                                \"description\": \"Base path for incoming connections\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"distributed-cache-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Base Path\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"expiration-duration\",\n-                                \"required\": true,\n+                                \"name\": \"HTTP Headers to receive as Attributes (Regex)\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"releasable-flowfile-count\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\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+                            \"Listening Port\": {\n+                                \"description\": \"The Port to listen on for incoming connections\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"release-signal-id\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Listening Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Data to Receive per Second\",\n                                 \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"target-signal-count\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Unconfirmed Flowfile Time\",\n                                 \"required\": true,\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+                            \"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\": \"wait-buffer-count\",\n-                                \"required\": true,\n+                                \"name\": \"Return Code\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"wait-mode\": {\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-                                    },\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"wait\",\n-                                \"description\": \"Specifies how to handle a FlowFile waiting for a notify signal\",\n-                                \"displayName\": \"Wait Mode\",\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\": \"wait-mode\",\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.RestrictedSSLContextService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"wait-penalty-duration\",\n+                                \"name\": \"authorized-issuer-dn-pattern\",\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Show Deltas\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"reporting-granularity\": {\n-                                \"allowableValues\": [\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-                                        \"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+                                        \"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\": \"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+                                        \"description\": \"Does not request the client certificate on handshake\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"five-minutes\",\n-                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n-                                \"displayName\": \"Reporting Granularity\",\n+                                \"defaultValue\": \"AUTO\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\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\": \"reporting-granularity\",\n+                                \"name\": \"client-authentication\",\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"health-check-port\",\n+                                \"required\": false,\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Directory Display Name\",\n-                                \"required\": false,\n+                                \"name\": \"max-thread-pool-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory Location\": {\n-                                \"description\": \"The directory path of the partition to be monitored.\",\n-                                \"displayName\": \"Directory Location\",\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\": \"Directory Location\",\n+                                \"name\": \"multipart-read-buffer-size\",\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+                            \"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\": \"Threshold\",\n+                                \"name\": \"multipart-request-max-size\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Relationship for successfully received FlowFiles\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"disk\",\n-                            \"monitoring\",\n-                            \"repo\",\n-                            \"storage\",\n-                            \"warning\"\n+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rest\"\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+                        \"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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n                         \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Memory Pool\": {\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+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"G1 Eden Space\",\n-                                        \"value\": \"G1 Eden Space\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"G1 Old Gen\",\n-                                        \"value\": \"G1 Old Gen\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"G1 Survivor Space\",\n-                                        \"value\": \"G1 Survivor Space\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"G1 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\": \"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\": \"Memory Pool\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Interval\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\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+                            \"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\": \"Usage Threshold\",\n+                                \"name\": \"Max Batch Size\",\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"Port\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n-                                \"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 JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\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\": \"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-                            \"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\": \"2.0.0-M3\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"name\": \"Max Size of Socket Buffer\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delete-mongo-delete-mode\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"delete-mongo-fail-on-no-delete\",\n-                                \"required\": false,\n+                                \"name\": \"Receive Buffer Size\",\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+                            \"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\": \"mongo-client-service\",\n+                                \"name\": \"SSL Context 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.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"Messages received successfully will be sent out 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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"mongo\",\n-                            \"mongodb\"\n+                            \"listen\",\n+                            \"logs\",\n+                            \"relp\",\n+                            \"tcp\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62921,265 +70006,362 @@\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Client Auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"get-mongo-send-empty\": {\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\": \"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\": \"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\": \"get-mongo-send-empty\",\n-                                \"required\": false,\n+                                \"name\": \"Parse Messages\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Protocol\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\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+                                \"defaultValue\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n+                                \"name\": \"Protocol\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\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+                            \"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\": \"mongo-client-service\",\n+                                \"name\": \"SSL Context 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.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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.\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"results-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-pretty-printing\": {\n+                            \"socket-keep-alive\": {\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+                                \"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\": \"use-pretty-printing\",\n+                                \"name\": \"socket-keep-alive\",\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\": \"All FlowFiles that have the results of a successful query execution go here.\",\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\": \"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+                                \"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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"mongodb\",\n-                            \"read\"\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.mongodb.GetMongo\",\n-                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\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\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63188,194 +70370,254 @@\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                                \"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-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\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+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"get-mongo-record-writer-factory\",\n+                                \"name\": \"Receive Buffer 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\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"mongo-client-service\",\n+                                \"name\": \"SSL Context 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.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongodb-schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"pool-receive-buffers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"get\",\n-                            \"json\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n+                            \"listen\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The database where the results came from.\",\n-                                \"name\": \"mongo.database.name\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The collection where the results came from.\",\n-                                \"name\": \"mongo.collection.name\"\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\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63384,198 +70626,241 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"insert\",\n-                                        \"value\": \"insert\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"update\",\n-                                        \"value\": \"update\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"insert\",\n-                                \"description\": \"Indicates whether the processor should insert or update content\",\n-                                \"displayName\": \"Mode\",\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\": \"Mode\",\n+                                \"name\": \"client-auth\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-number-tcp-connections\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-size-socket-buffer\",\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+                            \"port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"port\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Query Key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Upsert\": {\n+                            \"reader-error-handling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Transfers any records already received and closes the connection.\",\n+                                        \"displayName\": \"Transfer\",\n+                                        \"value\": \"Transfer\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Discards any records already received and closes the connection.\",\n+                                        \"displayName\": \"Discard\",\n+                                        \"value\": \"Discard\"\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Upsert\",\n+                                \"name\": \"reader-error-handling-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-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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-batch-size\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"put-mongo-update-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With whole document\",\n-                                        \"value\": \"doc\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"With operators enabled\",\n-                                        \"value\": \"operators\"\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+                            \"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\": \"put-mongo-update-mode\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putmongo-update-query\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"Messages received successfully will be sent out 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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\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.mongodb.PutMongo\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The host that sent the data.\",\n+                                \"name\": \"tcp.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The port that the processor accepted the connection on.\",\n+                                \"name\": \"tcp.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+                                \"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-mongodb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63584,133 +70869,167 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the data is encoded\",\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-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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\": \"true\",\n-                                \"description\": \"Ordered execution of bulk-writes and break on error - otherwise arbitrary order and continue on error\",\n-                                \"displayName\": \"Ordered\",\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\": \"Ordered\",\n+                                \"name\": \"Max Size of Socket Buffer\",\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+                            \"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\": \"mongo-client-service\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Sending Host\",\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\": \"2.0.0-M3\"\n-                                }\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Sending Host Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"Messages received successfully will be sent out 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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"bulk\",\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"source\",\n+                            \"udp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongoBulkOperations\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB as bulk-update\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63719,216 +71038,212 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Local Network Interface\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Message Queue\",\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\": \"False\",\n-                                \"description\": \"        Enable or disable bypassing document schema validation during insert or update operations.\\n        Bypassing document validation is a Privilege Action in MongoDB.\\n        Enabling this property can result in authorization errors for users with limited privileges.\\n\",\n-                                \"displayName\": \"Bypass Validation\",\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\": \"bypass-validation\",\n+                                \"name\": \"Max Size of Socket Buffer\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"Port\": {\n+                                \"description\": \"The port to listen on for communication.\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"insert_count\",\n+                                \"name\": \"Receive Buffer Size\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"ordered\",\n+                                \"name\": \"poll-timeout\",\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+                                \"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.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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+                            \"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\": \"update-key-fields\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sending-host\",\n                                 \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sending-host-port\",\n                                 \"required\": false,\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-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"Messages received successfully will be sent out 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+                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n+                            \"ingest\",\n+                            \"listen\",\n                             \"record\",\n-                            \"update\",\n-                            \"upsert\"\n+                            \"source\",\n+                            \"udp\"\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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63937,204 +71252,218 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Batch Size\",\n+                                \"name\": \"Attributes to Ignore\",\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\": \"Environment variables 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Attributes to Log\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"allow-disk-use\": {\n+                            \"Log FlowFile Properties\": {\n                                 \"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+                                \"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\": \"allow-disk-use\",\n+                                \"name\": \"Log FlowFile Properties\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n+                            \"Log Level\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"trace\",\n+                                        \"value\": \"trace\"\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+                                        \"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-                                \"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+                                \"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\": \"json-type\",\n+                                \"name\": \"Log Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-agg-query\": {\n-                                \"description\": \"The aggregation query to be executed.\",\n-                                \"displayName\": \"Query\",\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-agg-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log Payload\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n-                                \"required\": true,\n+                                \"name\": \"Log prefix\",\n+                                \"required\": false,\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+                            \"Output Format\": {\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+                                    },\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+                                    }\n+                                ],\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\": \"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\": \"2.0.0-M3\"\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.\",\n-                                \"displayName\": \"Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-date-format\",\n-                                \"required\": false,\n+                                \"name\": \"Output Format\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-ignore-regex\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"results-per-flowfile\",\n+                                \"name\": \"attributes-to-log-regex\",\n                                 \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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+                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"aggregation\",\n-                            \"mongo\"\n+                            \"attributes\",\n+                            \"logging\"\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.standard.LogAttribute\",\n+                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64147,116 +71476,76 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"delete-gridfs-query\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                                \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n+                                \"name\": \"log-level\",\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+                            \"log-message\": {\n+                                \"description\": \"The log message to emit\",\n+                                \"displayName\": \"Log message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\n+                                \"name\": \"log-message\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n+                                \"name\": \"log-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n+                                \"description\": \"All FlowFiles are routed 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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gridfs\",\n-                            \"mongodb\"\n+                            \"attributes\",\n+                            \"logging\"\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+                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n+                        \"typeDescription\": \"Emits a log message at the specified log level\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64264,154 +71553,109 @@\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                         \"multiProcessorUseCases\": [],\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\": \"Environment variables 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-                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-operation-mode\": {\n+                            \"include-empty-values\": {\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\": \"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\": \"mongo-operation-mode\",\n+                                \"name\": \"include-empty-values\",\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+                            \"lookup-service\": {\n+                                \"description\": \"The lookup service to use for attribute lookups\",\n+                                \"displayName\": \"Lookup Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-query-attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n                             },\n                             {\n-                                \"description\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gridfs\",\n-                            \"mongo\"\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.mongodb.gridfs.FetchGridFS\",\n-                        \"typeDescription\": \"Retrieves one or more files from a GridFS bucket by file name or by a user-defined query.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n+                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64419,1202 +71663,1211 @@\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+                        \"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                         \"multiProcessorUseCases\": [],\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+                            \"Root Record Path\": {\n+                                \"description\": \"A RecordPath that points to a child Record within each of the top-level Records in the FlowFile. If specified, the additional RecordPath properties will be evaluated against this child Record instead of the top-level Record. This allows for performing enrichment against multiple child Records within a single top-level Record.\",\n+                                \"displayName\": \"Root Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\n+                                \"name\": \"Root Record Path\",\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+                            \"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\": \"gridfs-client-service\",\n+                                \"name\": \"lookup-service\",\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.lookup.LookupService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"gridfs-database-name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-database-name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"record-path-lookup-miss-result-cache-size\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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 \\\"Result RecordPath\\\" 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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-chunk-size\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-update-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-enforce-uniqueness\": {\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"result-contents\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No uniqueness will be enforced.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\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+                                        \"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\": \"Only the file hash must be unique.\",\n-                                        \"displayName\": \"Hash\",\n-                                        \"value\": \"hash\"\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\": \"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+                                \"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\": \"putgridfs-enforce-uniqueness\",\n+                                \"name\": \"result-contents\",\n                                 \"required\": true,\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+                            \"result-record-path\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"use-property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Record Update Strategy\",\n+                                        \"propertyName\": \"record-update-strategy\"\n+                                    }\n+                                ],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"putgridfs-hash-attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"result-record-path\",\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+                            \"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. If the given Record Paths evaluate such that multiple sub-records are evaluated, the parent Record will be routed to 'unmatched' unless all sub-records match.\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-properties-prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"routing-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\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                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this 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 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\": \"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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"gridfs\",\n-                            \"mongo\",\n-                            \"put\",\n-                            \"store\"\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.mongodb.gridfs.PutGridFS\",\n-                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-py4j-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-distributed-cache-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"version\": \"2.0.0-M3\",\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+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"Communications Timeout\",\n+                                \"name\": \"Attribute Strategy\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\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\": \"Server Hostname\",\n+                                \"name\": \"Compression Level\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Correlation Attribute Name\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"Communications Timeout\",\n+                                \"name\": \"Delimiter Strategy\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Demarcator File\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Footer File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Server Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Header File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\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.DistributedSetCacheClient\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Keep Path\": {\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-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"dependentValues\": [\n+                                            \"ZIP\",\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\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+                                \"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\": \"Eviction Strategy\",\n+                                \"name\": \"Keep Path\",\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+                            \"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\": \"Maximum Cache Entries\",\n-                                \"required\": true,\n+                                \"name\": \"Max Bin Age\",\n+                                \"required\": false,\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+                            \"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\": \"Persistence Directory\",\n+                                \"name\": \"Maximum Group Size\",\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+                            \"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\": \"Port\",\n+                                \"name\": \"Maximum Number of Entries\",\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\": \"2.0.0-M3\"\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+                            \"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-read-size\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Merge Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\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\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\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\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\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\": \"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\": \"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\": \"Eviction Strategy\",\n+                                \"name\": \"Merge Format\",\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+                            \"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>. 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\": \"Maximum Cache Entries\",\n+                                \"name\": \"Merge Strategy\",\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+                            \"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\": \"Persistence Directory\",\n-                                \"required\": false,\n+                                \"name\": \"Minimum Group Size\",\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+                            \"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\": \"Port\",\n+                                \"name\": \"Minimum Number of Entries\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Tar Modified Time\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"maximum-read-size\",\n-                                \"required\": false,\n+                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"required\": true,\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"base-id\": {\n-                                \"description\": \"The ID of the Airtable base to be queried.\",\n-                                \"displayName\": \"Base ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-filter\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-records-per-flowfile\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query-page-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query-time-window-lag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"table-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                            \"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\": \"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\": \"2.0.0-M3\"\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-                        \"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+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.MergeRecord\",\n+                            \"org.apache.nifi.processors.standard.SegmentContent\"\n+                        ],\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\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\": \"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                         \"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-                            \"airtable\",\n-                            \"database\",\n-                            \"query\"\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\": true,\n+                        \"triggerSerially\": false,\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-                        \"useCases\": [],\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Demarcator\\\" = \\\"\\\\n\\\" (a newline can be inserted by pressing Shift + Enter)\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n+                                \"description\": \"Concatenate FlowFiles with textual content together in order to create fewer, larger FlowFiles.\",\n+                                \"keywords\": [\n+                                    \"concatenate\",\n+                                    \"bundle\",\n+                                    \"aggregate\",\n+                                    \"bin\",\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"smash\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Bin Packing Algorithm\\\"\\n\\\"Merge Format\\\" = \\\"Binary Concatenation\\\"\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Minimum Number of Entries\\\" = \\\"1\\\"\\n\\\"Maximum Number of Entries\\\" = \\\"500000000\\\"\\n\\\"Minimum Group Size\\\" = the minimum amount of data to write to an output FlowFile. A reasonable value might be \\\"128 MB\\\"\\n\\\"Maximum Group Size\\\" = the maximum amount of data to write to an output FlowFile. A reasonable value might be \\\"256 MB\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be \\\"5 mins\\\"\\n\",\n+                                \"description\": \"Concatenate FlowFiles with binary content together in order to create fewer, larger FlowFiles.\",\n+                                \"keywords\": [\n+                                    \"concatenate\",\n+                                    \"bundle\",\n+                                    \"aggregate\",\n+                                    \"bin\",\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"smash\"\n+                                ],\n+                                \"notes\": \"Not all binary data can be concatenated together. Whether or not this configuration is valid depends on the type of your data.\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Merge Strategy\\\" = \\\"Defragment\\\"\\n\\\"Merge Format\\\" = the value of Merge Format depends on the desired output format. If the file was previously zipped together and was split apart by UnpackContent,\\n    a Merge Format of \\\"ZIP\\\" makes sense. If it was previously a .tar file, a Merge Format of \\\"TAR\\\" makes sense. If the data is textual, \\\"Binary Concatenation\\\" can be\\n    used to combine the text into a single document.\\n\\\"Delimiter Strategy\\\" = \\\"Text\\\"\\n\\\"Max Bin Age\\\" = the maximum amount of time to wait for incoming data before timing out and transferring the fragments to 'failure'. A reasonable value might be \\\"5 mins\\\"\\n\\nFor textual data, \\\"Demarcator\\\" should be set to a newline (\\\\n), set by pressing Shift+Enter in the UI. For binary data, \\\"Demarcator\\\" should be left blank.\\n\",\n+                                \"description\": \"Reassemble a FlowFile that was previously split apart into smaller FlowFiles by a processor such as SplitText, UnpackContext, SplitRecord, etc.\",\n+                                \"keywords\": [\n+                                    \"reassemble\",\n+                                    \"repack\",\n+                                    \"merge\",\n+                                    \"recombine\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\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\": \"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+                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n+                                \"name\": \"merge.count\"\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+                                \"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\": \"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+                                \"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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ssl-context-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"propertyDescriptors\": {\n-                            \"Keystore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Keystore\",\n-                                \"displayName\": \"Keystore Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Keystore Filename\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keystore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Keystore Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\n+                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\n\\nAdd a single additional property. The name of the property should describe the field on which the data is being merged together.\\nThe property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, to merge together data that has the same value for the \\\"productSku\\\" field, add a property named `productSku` with a value of `/productSku`.\\n\\nConnect the \\\"success\\\" Relationship to MergeRecord.\\nAuto-terminate the \\\"original\\\" Relationship.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JKS\",\n-                                        \"value\": \"JKS\"\n+                                        \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Maximum Number of Records\\\" property to a value at least as large as the \\\"Minimum Number of Records.\\\" If there is no need to limit the maximum number of\\n    records per file, this number can be set to a value that will never be reached such as `1000000000`.\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\nSet the value of the \\\"Correlation Attribute Name\\\" property to the name of the property that you added in the PartitionRecord Processor. For example, if merging data\\n    based on the \\\"productSku\\\" field, the property in PartitionRecord was named `productSku` so the value of the \\\"Correlation Attribute Name\\\" property should\\n    be `productSku`.\\nSet the \\\"Maximum Number of Bins\\\" property to a value that is at least as large as the different number of values that will be present for the Correlation Attribute.\\n    For example, if you expect 1,000 different SKUs, set this value to at least `1001`. It is not advisable, though, to set the value above 10,000.\\n\\nConnect the 'merged' Relationship to the next component in the flow.\\nAuto-terminate the 'original' Relationship.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.MergeRecord\"\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\": \"Keystore Type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Protocol\": {\n+                                \"description\": \"Combine together many Records that have the same value for a particular field in the data, in order to create a single, larger file\",\n+                                \"keywords\": [\n+                                    \"merge\",\n+                                    \"combine\",\n+                                    \"aggregate\",\n+                                    \"like records\",\n+                                    \"similar data\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attribute Strategy\": {\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+                                        \"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\": \"Require TLSv1.2 protocol version\",\n-                                        \"displayName\": \"TLSv1.2\",\n-                                        \"value\": \"TLSv1.2\"\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\": \"TLS\",\n-                                \"description\": \"TLS Protocol Version for encrypted connections. Supported versions depend on the specific version of Java used.\",\n-                                \"displayName\": \"TLS Protocol\",\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\": \"SSL Protocol\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Truststore Filename\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Attribute Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Password\": {\n-                                \"description\": \"The password for the Truststore\",\n-                                \"displayName\": \"Truststore Password\",\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\": \"Truststore Password\",\n+                                \"name\": \"correlation-attribute-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Truststore 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 Truststore\",\n-                                \"displayName\": \"Truststore Type\",\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\": \"Truststore Type\",\n+                                \"name\": \"max-bin-age\",\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+                            \"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\": \"key-password\",\n+                                \"name\": \"max-bin-size\",\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.RestrictedSSLContextService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-ssl-context-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Keystore Filename\",\n+                                \"name\": \"max-records\",\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.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\": \"Keystore Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"max.bin.count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Keystore Type\": {\n+                            \"merge-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BCFKS\",\n-                                        \"value\": \"BCFKS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PKCS12\",\n-                                        \"value\": \"PKCS12\"\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\": \"JKS\",\n-                                        \"value\": \"JKS\"\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-                                \"description\": \"The Type of the Keystore\",\n-                                \"displayName\": \"Keystore Type\",\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\": \"Keystore Type\",\n-                                \"required\": false,\n+                                \"name\": \"merge-strategy\",\n+                                \"required\": true,\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+                            \"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\": \"SSL Protocol\",\n-                                \"required\": false,\n+                                \"name\": \"min-bin-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Truststore Filename\": {\n-                                \"description\": \"The fully-qualified filename of the Truststore\",\n-                                \"displayName\": \"Truststore Filename\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Truststore Filename\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"min-records\",\n+                                \"required\": true,\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\": \"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 Truststore\",\n-                                \"displayName\": \"Truststore Type\",\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\": \"Truststore Type\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"key-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                \"version\": \"2.0.0-M3\"\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                         \"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+                            \"content\",\n+                            \"correlation\",\n+                            \"event\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"stream\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-enrich-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the \\\"Record Reader\\\" to specify a Record Reader that is appropriate for the incoming data type.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output data type.\\nSet \\\"Merge Strategy\\\" to `Bin-Packing Algorithm`.\\nSet the \\\"Minimum Bin Size\\\" to desired file size of the merged output file. For example, a value of `1 MB` will result in not merging data until at least\\n    1 MB of data is available (unless the Max Bin Age is reached first). If there is no desired minimum file size, leave the default value of `0 B`.\\nSet the \\\"Minimum Number of Records\\\" property to the minimum number of Records that should be included in the merged output file. For example, setting the value\\n    to `10000` ensures that the output file will have at least 10,000 Records in it (unless the Max Bin Age is reached first).\\nSet the \\\"Max Bin Age\\\" to specify the maximum amount of time to hold data before merging. This can be thought of as a \\\"timeout\\\" at which time the Processor will\\n    merge whatever data it is, even if the \\\"Minimum Bin Size\\\" and \\\"Minimum Number of Records\\\" has not been reached. It is always recommended to set the value.\\n    A reasonable default might be `10 mins` if there is no other latency requirement.\\n\\nConnect the 'merged' Relationship to the next component in the flow. Auto-terminate the 'original' Relationship.\\n\",\n+                                \"description\": \"Combine together many arbitrary Records in order to create a single, larger file\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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-enrich-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -65627,131 +72880,91 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Geo Database File\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"End Offset\",\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+                            \"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\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n+                                \"displayName\": \"Remove All Content\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remove All Content\",\n                                 \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"Start Offset\",\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+                                \"description\": \"Processed flowfiles.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\"\n+                            \"binary\",\n+                            \"discard\",\n+                            \"keep\"\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.standard.ModifyBytes\",\n+                        \"typeDescription\": \"Discard byte range at the start and end or all content of a binary file.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\n-                            {\n-                                \"description\": \"The postal code for the country identified\",\n-                                \"name\": \"X.geo.postalcode\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -65764,209 +72977,254 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\n+                                \"name\": \"Activity Restored Message\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-city-record-path\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-iso-record-path\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-postal-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Continually Send Messages\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-country-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Copy Attributes\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-ip-record-path\",\n+                                \"name\": \"Inactivity Message\",\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+                            \"Monitoring Scope\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"node\",\n+                                        \"value\": \"node\"\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-latitude-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Monitoring Scope\",\n+                                \"required\": true,\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+                            \"Reporting Node\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"all\",\n+                                        \"value\": \"all\"\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+                                    }\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geo-enrich-ip-longitude-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reporting Node\",\n+                                \"required\": true,\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-reader\",\n+                                \"name\": \"Reset State on Restart\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-record-writer\": {\n-                                \"description\": \"Record writer service to use for enriching the flowfile contents.\",\n-                                \"displayName\": \"Record Writer\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geo-enrich-ip-record-writer\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Threshold Duration\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"geo-enrich-ip-split-found-not-found\": {\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\": \"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+                                \"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\": \"geo-enrich-ip-split-found-not-found\",\n+                                \"name\": \"Wait for Activity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\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\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\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\": \"The original input flowfile goes to this relationship regardless of whether the content was enriched or not.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All incoming FlowFiles are routed to success\",\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+                                \"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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"geo\",\n-                            \"ip\",\n-                            \"maxmind\",\n-                            \"record\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -65979,111 +73237,133 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Geo Database File\": {\n-                                \"description\": \"Path to Maxmind IP Enrichment Database File\",\n-                                \"displayName\": \"MaxMind Database File\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Geo Database File\",\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+                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"release-signal-id\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"IP Address Attribute\",\n+                                \"name\": \"signal-counter-delta\",\n                                 \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Log Level\",\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\": \"Where to route flow files after unsuccessfully enriching attributes because no data was found\",\n-                                \"name\": \"not found\"\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\": \"Where to route flow files after successfully enriching attributes with data provided by database\",\n-                                \"name\": \"found\"\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ISP\",\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"maxmind\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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\": false,\n-                        \"artifact\": \"nifi-enrich-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66093,150 +73373,126 @@\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_QUERY_TYPE\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DNS_RETRIES\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"QUERY_PARSER\": {\n-                                \"allowableValues\": [\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"Use a delimiter character or RegEx  to split the results into attributes\",\n-                                        \"displayName\": \"Split\",\n-                                        \"value\": \"Split\"\n+                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can help improve performance by batching many flowfiles together into 1 larger file that is transmitted by InvokeHTTP.\\n\\n    Connect the success relationship of PackageFlowFile to the input of InvokeHTTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n                                     },\n                                     {\n-                                        \"description\": \"Use a regular expression to split the results into attributes \",\n-                                        \"displayName\": \"RegEx\",\n-                                        \"value\": \"RegEx\"\n+                                        \"configuration\": \"    \\\"HTTP Method\\\" = \\\"POST\\\" to send data to ListenHTTP.\\n    \\\"HTTP URL\\\" should include the hostname, port, and path to the ListenHTTP.\\n    \\\"Request Content-Type\\\" = \\\"${mime.type}\\\" because PackageFlowFile output files have attribute mime.type=application/flowfile-v3.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.InvokeHTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"configuration\": \"    \\\"Listening Port\\\" = a unique port number.\\n\\n    ListenHTTP automatically unpacks files that have attribute mime.type=application/flowfile-v3.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that InvokeHTTP sends, then the original 99 FlowFiles will be output by ListenHTTP.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListenHTTP\"\n                                     }\n                                 ],\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\": \"QUERY_PARSER\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"Send FlowFile content and attributes from one NiFi instance to another NiFi instance.\",\n+                                \"keywords\": [\n+                                    \"flowfile\",\n+                                    \"attributes\",\n+                                    \"content\",\n+                                    \"ffv3\",\n+                                    \"flowfile-stream-v3\",\n+                                    \"transfer\"\n+                                ],\n+                                \"notes\": \"A Remote Process Group is preferred to send FlowFiles between two NiFi instances, but an alternative is to use PackageFlowFile then InvokeHTTP sending to ListenHTTP.\"\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+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"    \\\"Maximum Batch Size\\\" > 1 can improve storage efficiency by batching many FlowFiles together into 1 larger file that is stored.\\n\\n    Connect the success relationship to the input of any NiFi egress processor for offline storage.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PackageFlowFile\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"    \\\"Packaging Format\\\" = \\\"application/flowfile-v3\\\".\\n\\n    Connect the output of a NiFi ingress processor that reads files stored offline to the input of UnpackContent.\\n    If PackageFlowFile batches 99 FlowFiles into 1 file that is read from storage, then the original 99 FlowFiles will be output by UnpackContent.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.UnpackContent\"\n+                                    }\n+                                ],\n+                                \"description\": \"Export FlowFile content and attributes from NiFi to external storage and reimport.\",\n+                                \"keywords\": [\n+                                    \"flowfile\",\n+                                    \"attributes\",\n+                                    \"content\",\n+                                    \"ffv3\",\n+                                    \"flowfile-stream-v3\",\n+                                    \"offline\",\n+                                    \"storage\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"QUERY_PARSER_INPUT\",\n-                                \"required\": false,\n+                                \"name\": \"max-batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\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\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\n+                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"dns\",\n-                            \"enrich\",\n-                            \"ip\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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-enrich-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66249,211 +73505,204 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"ACCEPT_EMPTY_EXTENSIONS\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Queries are made without any particular dialect\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"The protocol used to perform the bulk query. \",\n-                                \"displayName\": \"Bulk Protocol\",\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\": \"BULK_PROTOCOL\",\n+                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\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+                            \"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\": \"KEY_GROUP\",\n-                                \"required\": false,\n+                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_INPUT\": {\n-                                \"description\": \"The value that should be used to populate the query\",\n-                                \"displayName\": \"Lookup value\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"QUERY_INPUT\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DATETIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"QUERY_PARSER\": {\n+                            \"FIELDS_DESTINATION\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not split results\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\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\": \"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-                            \"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\": \"WHOIS_QUERY_TYPE\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"WHOIS_SERVER\": {\n-                                \"description\": \"The Whois server to be used\",\n-                                \"displayName\": \"Whois Server\",\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\": \"WHOIS_SERVER\",\n+                                \"name\": \"FIELDS_DESTINATION\",\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+                            \"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 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\": \"WHOIS_SERVER_PORT\",\n+                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"WHOIS_TIMEOUT\",\n+                                \"name\": \"TIME_REPRESENTATION\",\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\": \"Where to route flow files if data enrichment query rendered no results\",\n-                                \"name\": \"not found\"\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\": \"Where to route flow files after successfully enriching attributes with data\",\n-                                \"name\": \"found\"\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"ip\",\n-                            \"whois\"\n+                            \"attributes\",\n+                            \"cef\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"system\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66462,119 +73711,106 @@\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                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"websocket-client-controller-service\",\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\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"websocket-client-id\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\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\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\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\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\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\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"system\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\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-websocket-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66583,111 +73819,175 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\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+                            \"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\": \"server-url-path\",\n+                                \"name\": \"Character Set\",\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+                            \"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, 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\": \"websocket-server-controller-service\",\n+                                \"name\": \"include_policy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"nil_policy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The missing field will not have an attribute added.\",\n+                                        \"displayName\": \"OMIT\",\n+                                        \"value\": \"OMIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The missing field will have an empty attribute added.\",\n+                                        \"displayName\": \"NULL\",\n+                                        \"value\": \"NULL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n+                                        \"displayName\": \"DASH\",\n+                                        \"value\": \"DASH\"\n+                                    }\n+                                ],\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\": \"nil_policy\",\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.WebSocketServerService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\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\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n-                            },\n-                            {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"syslog5424\",\n+                            \"system\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\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+                            },\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-websocket-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66695,1601 +73995,1243 @@\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                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-controller-service-id\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-endpoint-id\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-message-type\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-session-id\",\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\": \"2.0.0-M3\"\n+                                }\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+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be 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\": \"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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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-                            \"WebSocket\",\n-                            \"publish\",\n-                            \"send\"\n+                            \"bin\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"rpath\",\n+                            \"segment\",\n+                            \"split\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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-                        \"useCases\": [],\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the type of data that is being used to partition the data. The property's value should be a RecordPath that specifies which output FlowFile the Record belongs to.\\n\\nFor example, if we want to separate records based on their `transactionType` field, we could add a new property named `transactionType`. The value of the property might be `/transaction/type`. An input FlowFile will then be separated into as few FlowFiles as possible such that each output FlowFile has the same value for the `transactionType` field.\\n\",\n+                                \"description\": \"Separate records into separate FlowFiles so that all of the records in a FlowFile have the same value for a given field or set of fields.\",\n+                                \"keywords\": [\n+                                    \"separate\",\n+                                    \"split\",\n+                                    \"partition\",\n+                                    \"break apart\",\n+                                    \"colocate\",\n+                                    \"segregate\",\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"recordpath\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise.\\n\\nFor example, if we want to separate records based on whether or not they have a transaction total of more than $1,000 we could add a new property named `largeTransaction` with a value of `/transaction/total > 1000`. This will create two FlowFiles. In the first, all records will have a total over `1000`. In the second, all records will have a transaction less than or equal to 1000. Each FlowFile will have an attribute named `largeTransaction` with a value of `true` or `false`.\\n\",\n+                                \"description\": \"Separate records based on whether or not they adhere to a specific criteria\",\n+                                \"keywords\": [\n+                                    \"separate\",\n+                                    \"split\",\n+                                    \"partition\",\n+                                    \"break apart\",\n+                                    \"segregate\",\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"recordpath\",\n+                                    \"criteria\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"WebSocket Controller Service id.\",\n-                                \"name\": \"websocket.controller.service.id\"\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Established WebSocket session id.\",\n-                                \"name\": \"websocket.session.id\"\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"WebSocket endpoint id.\",\n-                                \"name\": \"websocket.endpoint.id\"\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\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\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\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             },\n                             {\n-                                \"description\": \"Detail of the failure.\",\n-                                \"name\": \"websocket.failure.detail\"\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-db-schema-registry-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-db-schema-registry-service-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Catalog Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Record Path\",\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 for retrieving table information.\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\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. (Debezium style operation types are also supported: \\\"r\\\" and \\\"c\\\" for INSERT, \\\"u\\\" for UPDATE, and \\\"d\\\" for DELETE)\",\n+                                \"displayName\": \"Statement Type Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Database Connection Pooling Service\",\n+                                \"name\": \"Statement Type Record Path\",\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\": \"2.0.0-M3\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema Name\",\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"registry\",\n-                            \"schema\",\n-                            \"table\"\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-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-slack-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-slack-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"access-token\": {\n-                                \"description\": \"Bot OAuth Token used for authenticating and authorizing the Slack request sent by NiFi.\",\n-                                \"displayName\": \"Access Token\",\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.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"api-url\": {\n-                                \"defaultValue\": \"https://slack.com/api\",\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\": \"API URL\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"channel-id\": {\n-                                \"description\": \"Slack channel, private group, or IM channel to send the message to. Use Channel ID instead of the name.\",\n-                                \"displayName\": \"Channel ID\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"channel-id\",\n+                                \"name\": \"put-db-record-allow-multiple-statements\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"input-character-set\": {\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\": \"Specifies the character set of the records used to generate the Slack message.\",\n-                                \"displayName\": \"Input Character Set\",\n+                                \"description\": \"The format to be applied when decoding string values to binary.\",\n+                                \"displayName\": \"Binary String Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-binary-format\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"web-service-client-provider\": {\n-                                \"description\": \"Controller service to provide HTTP client for communicating with Slack API\",\n-                                \"displayName\": \"Web Service Client Provider\",\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\": \"web-service-client-provider\",\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.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"record\",\n-                            \"sink\",\n-                            \"slack\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.services.slack.SlackRecordSink\",\n-                        \"typeDescription\": \"Format and send Records to a configured Channel using the Slack Post Message API. The service requires a Slack App with a Bot User configured for access to a Slack workspace. The Bot User OAuth Bearer Token is required for posting messages to Slack.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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. It must be granted the channels:history, groups:history, im:history, or mpim:history scope, depending on the type of conversation being used.\",\n-                                \"displayName\": \"Access Token\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-db-record-field-containing-sql\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of messages to retrieve in a single request to Slack. The entire response will be parsed into memory, so it is important that this be kept in mind when setting this value.\",\n-                                \"displayName\": \"Batch Size\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"put-db-record-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Channels\": {\n-                                \"description\": \"A comma-separated list of Slack Channels to Retrieve Messages From. Each element in the list may be either a Channel ID, such as C0L9VCD47, or (for public channels only) the name of a channel, prefixed with a # sign, such as #general. If any channel name is provided instead,instead of an ID, the Access Token provided must be granted the channels:read scope in order to resolve the Channel ID. See the Processor's Additional Details for information on how to find a Channel ID.\",\n-                                \"displayName\": \"Channels\",\n+                            \"put-db-record-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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Channels\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-quoted-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Message Blocks\": {\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\": \"Specifies whether or not the output JSON should include the value of the 'blocks' field for each Slack Message. This field includes information such as individual parts of a message that are formatted using rich text. This may be useful, for instance, for parsing. However, it often accounts for a significant portion of the data and as such may be set to null when it is not useful to you.\",\n-                                \"displayName\": \"Include Message Blocks\",\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 Message Blocks\",\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-db-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Null Fields\": {\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\": \"Environment variables 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\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not fields that have null values should be included in the output JSON. If true, any field in a Slack Message that has a null value will be included in the JSON with a value of null. If false, the key omitted from the output JSON entirely. Omitting null values results in smaller messages that are generally more efficient to process, but including the values may provide a better understanding of the format, especially for schema inference.\",\n-                                \"displayName\": \"Include Null Fields\",\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\": \"Include Null Fields\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-translate-field-names\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Reply Monitor Frequency\": {\n-                                \"defaultValue\": \"5 mins\",\n-                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp falls between now and the amount of time specified by the <Reply Monitor Window> property. This property determines how frequently those messages are polled. Setting the value to a shorter duration may result in replies to messages being captured more quickly, providing a lower latency. However, it will also result in additional resource use and could trigger Rate Limiting to occur.\",\n-                                \"displayName\": \"Reply Monitor Frequency\",\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\": \"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\": \"Reply Monitor Frequency\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-unmatched-column-behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Reply Monitor Window\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"After consuming all messages in a given channel, this Processor will periodically poll all \\\"threaded messages\\\", aka Replies, whose timestamp is between now and this amount of time in the past in order to check for any new replies. Setting this value to a larger value may result in additional resource use and may result in Rate Limiting. However, if a user replies to an old thread that was started outside of this window, the reply may not be captured.\",\n-                                \"displayName\": \"Reply Monitor Window\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reply Monitor Window\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-unmatched-field-behavior\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Resolve Usernames\": {\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\": \"Environment variables 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\": \"\",\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 User IDs should be resolved to usernames. By default, Slack Messages provide the ID of the user that sends a message, such as U0123456789, but not the username, such as NiFiUser. The username may be resolved, but it may require additional calls to the Slack API and requires that the Token used be granted the users:read scope. If set to true, usernames will be resolved with a best-effort policy: if a username cannot be obtained, it will be skipped over. Also, note that when a username is obtained, the Message's <username> field is populated, and the <text> field is updated such that any mention will be output such as \\\"Hi @user\\\" instead of \\\"Hi <@U1234567>\\\".\",\n-                                \"displayName\": \"Resolve Usernames\",\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\": \"Resolve Usernames\",\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ListenSlack\"\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-                        \"stateful\": {\n-                            \"description\": \"Maintains a mapping of Slack Channel IDs to the timestamp of the last message that was retrieved for that channel. This allows the processor to only retrieve messages that have been posted since the last time the processor was run. This state is stored in the cluster so that if the Primary Node changes, the new node will pick up where the previous node left off.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Slack messages that are successfully received will be routed to this relationship\",\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\": \"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                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"conversation\",\n-                            \"conversation.history\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\"\n+                            \"database\",\n+                            \"delete\",\n+                            \"insert\",\n+                            \"jdbc\",\n+                            \"put\",\n+                            \"record\",\n+                            \"sql\",\n+                            \"update\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.ConsumeSlack\",\n-                        \"typeDescription\": \"Retrieves messages from one or more configured Slack channels. The messages are written out in JSON format. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages from Slack.\",\n-                        \"useCases\": [],\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\",\n+                                \"description\": \"Insert records into a database\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\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 number of slack messages that are included in the FlowFile\",\n-                                \"name\": \"slack.message.count\"\n-                            },\n-                            {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n-                                \"name\": \"mime.type\"\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\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"250 millis\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"App Token\": {\n-                                \"description\": \"The Application Token that is registered to your Slack application\",\n-                                \"displayName\": \"App Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"App Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Bot Token\": {\n-                                \"description\": \"The Bot Token that is registered to your Slack application\",\n-                                \"displayName\": \"Bot Token\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Bot Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Event Type to Receive\": {\n+                            \"Cache update strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The Processor is to receive only slack messages that mention the bot user (App Mention Events)\",\n-                                        \"displayName\": \"Receive App Mention Events\",\n-                                        \"value\": \"Receive App Mention Events\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Processor is to receive Slack Message Events\",\n-                                        \"displayName\": \"Receive Message Events\",\n-                                        \"value\": \"Receive Message Events\"\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\": \"The Processor is to receive Commands from Slack that are specific to your application. The Processor will not receive Message Events.\",\n-                                        \"displayName\": \"Receive Commands\",\n-                                        \"value\": \"Receive Commands\"\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\": \"Receive App Mention Events\",\n-                                \"description\": \"Specifies the type of Event that the Processor should respond to\",\n-                                \"displayName\": \"Event Type to Receive\",\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\": \"Event Type to Receive\",\n+                                \"name\": \"Cache update strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Resolve User Details\": {\n-                                \"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-                                            \"Receive App Mention Events\",\n-                                            \"Receive Message Events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Event Type to Receive\",\n-                                        \"propertyName\": \"Event Type to Receive\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the Processor should lookup details about the Slack User who sent the received message. If true, the output JSON will contain an additional field named 'userDetails'. The 'user' field will still contain the ID of the user. In order to enable this capability, the Bot Token must be granted the 'users:read' and optionally the 'users.profile:read' Bot Token Scope. If the rate limit is exceeded when retrieving this information, the received message will be rejected and must be re-delivered.\",\n-                                \"displayName\": \"Resolve User Details\",\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\": \"Resolve User Details\",\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\": \"2.0.0-M3\"\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                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ConsumeSlack\"\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\": \"All FlowFiles that are created will be sent to this Relationship.\",\n+                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed 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+                                \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"event\",\n-                            \"listen\",\n-                            \"message\",\n-                            \"real-time\",\n-                            \"receive\",\n-                            \"slack\",\n-                            \"social media\",\n-                            \"team\",\n-                            \"text\",\n-                            \"unstructured\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.slack.ListenSlack\",\n-                        \"typeDescription\": \"Retrieves real-time messages or Slack commands from one or more Slack conversations. The messages are written out in JSON format. Note that this Processor should be used to obtain real-time messages and commands from Slack and does not provide a mechanism for obtaining historical messages. The ConsumeSlack Processor should be used for an initial load of messages from a channel. See Usage / Additional Details for more information about how to configure this Processor and enable it to retrieve messages and commands from Slack.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n-                                \"name\": \"mime.type\"\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-slack-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attach File\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"Set \\\"Destination\\\" to \\\"flowfile-attribute\\\"\\n\\nAdd a new property named \\\"thread.ts\\\" with a value of `$.threadTs`\\nAdd a new property named \\\"message.ts\\\" with a value of `$.ts`\\nAdd a new property named \\\"channel.id\\\" with a value of `$.channel`\\nAdd a new property named \\\"user.id\\\" with a value of `$.user`\\n\\nConnect the \\\"matched\\\" Relationship to PublishSlack.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to `${'channel.id'}`\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the response. If desired, you can reference the user of the original message by including the text `<@${'user.id'}>`.\\n    For example: `Hey, <@${'user.id'}>, thanks for asking...`\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"false\\\".\\nSet \\\"Thread Timestamp\\\" to `${'thread.ts':replaceEmpty( ${'message.ts'} )}`\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.slack.PublishSlack\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Respond to a Slack message in a thread.\",\n-                                \"keywords\": [\n-                                    \"slack\",\n-                                    \"respond\",\n-                                    \"reply\",\n-                                    \"thread\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                                \"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\": \"Access Token\",\n+                                \"name\": \"Attach File\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Channel\",\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"CC\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"From\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include FlowFile Content as Attachment\": {\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-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use 'Message Text' Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\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+                                \"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\": \"Include FlowFile Content as Attachment\",\n+                                \"name\": \"Include All Attributes In Message\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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\": \"Max FlowFile Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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+                            \"Message\": {\n+                                \"description\": \"The body of the email message\",\n+                                \"displayName\": \"Message\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Text\",\n-                                \"required\": true,\n+                                \"name\": \"Message\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Publish Strategy\": {\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-                                    },\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-                                    }\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+                            \"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\": \"Publish Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Auth\",\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+                            \"SMTP Hostname\": {\n+                                \"description\": \"The hostname of the SMTP host\",\n+                                \"displayName\": \"SMTP Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Thread Timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.slack.ConsumeSlack\",\n-                            \"org.apache.nifi.processors.slack.ListenSlack\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                        ],\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\\nthe 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\\na file attachment.\\n\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Use 'Message Text' Property\\\".\\nSet \\\"Message Text\\\" to the text that you would like to send as the Slack message.\\nSet \\\"Include FlowFile Content as Attachment\\\" to \\\"true\\\" if the FlowFile's contents should be attached as a file, or \\\"false\\\" to send just the message text without an attachment.\\n\",\n-                                \"description\": \"Send specific text as a message to Slack, optionally including the FlowFile's contents as an attached file.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configuration\": \"Set \\\"Access Token\\\" to the value of your Slack OAuth Access Token.\\nSet \\\"Channel\\\" to the ID of the channel or the name of the channel prefixed with the # symbol. For example, \\\"C0123456789\\\" or \\\"#general\\\".\\nSet \\\"Publish Strategy\\\" to \\\"Send FlowFile Content as Message\\\".\\n\",\n-                                \"description\": \"Send the contents of the FlowFile as a message to Slack.\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"version\": \"2.0.0-M3\",\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-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-key-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-key-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"key\": {\n-                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key\",\n-                                \"dynamic\": false,\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.key.service.api.PrivateKeyService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-kubernetes-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-registry-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\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\": \"avro-reg-validated-field-names\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\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-                        \"propertyDescriptors\": {\n-                            \"JSON Schema Version\": {\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-                                    },\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-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n+                                \"name\": \"SMTP 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.schemaregistry.services.JsonSchemaRegistry\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-snmp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"snmp-authentication-passphrase\": {\n+                            },\n+                            \"SMTP Password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n+                                            \"password-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\n+                                \"description\": \"Password for the SMTP account\",\n+                                \"displayName\": \"SMTP Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-passphrase\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\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+                            \"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\": \"snmp-authentication-protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Port\",\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+                            \"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\": \"snmp-community\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Socket Factory\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n+                                \"name\": \"SMTP TLS\",\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+                            \"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\": \"snmp-oid\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SMTP Username\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n+                                \"name\": \"SMTP X-Mailer Header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"snmp-private-protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Subject\",\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+                            \"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\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"To\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"snmp-retries\",\n+                                \"name\": \"attribute-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"authorization-mode\": {\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+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\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\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\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\": \"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\": \"snmp-security-level\",\n+                                \"name\": \"authorization-mode\",\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+                            \"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\": \"snmp-security-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"email-ff-content-as-message\",\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+                            \"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\": \"snmp-strategy\",\n+                                \"name\": \"input-character-set\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-textual-oid\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\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+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\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+                                \"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\": \"snmp-version\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\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\": \"FlowFiles that are successfully sent will be 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+                                \"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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": 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-                            \"get\",\n-                            \"oid\",\n-                            \"snmp\",\n-                            \"walk\"\n+                            \"email\",\n+                            \"notify\",\n+                            \"put\",\n+                            \"smtp\"\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+                        \"type\": \"org.apache.nifi.processors.standard.PutEmail\",\n+                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -68297,770 +75239,493 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"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\": \"snmp-manager-port\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"Conflict Resolution\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\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\": \"snmp-security-level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"snmp-usm-security-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"noAuthNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"usm-security-names\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\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\": \"snmp-usm-security-names\",\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-file-path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\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+                                \"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\": \"snmp-usm-users-file-path\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Conflict Resolution\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-json-content\": {\n-                                \"dependencies\": [\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n                                     }\n                                 ],\n-                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON content\",\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\": \"snmp-usm-users-json-content\",\n+                                \"name\": \"Connection Mode\",\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+                            \"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\": \"snmp-usm-users-source\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"Create Directory\": {\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\": \"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\": \"snmp-version\",\n+                                \"name\": \"Create Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"listen\",\n-                            \"snmp\",\n-                            \"trap\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Dot Rename\": {\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\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\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\": \"snmp-authentication-protocol\",\n-                                \"required\": true,\n+                                \"name\": \"Dot Rename\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-community\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\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+                            \"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\": \"snmp-private-protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\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+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\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+                            \"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\": \"snmp-retries\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Username\",\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+                            \"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\": \"snmp-security-level\",\n-                                \"required\": true,\n+                                \"name\": \"Internal Buffer 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\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+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-agent-address\",\n-                                \"required\": true,\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-enterprise-oid\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-generic-type\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Proxy 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+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"dependencies\": [\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+                            \"Reject Zero-Byte Files\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\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\": \"Generic trap type is an integer in the range of 0 to 6. See processor usage for details.\",\n-                                \"displayName\": \"Generic Trap Type\",\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\": \"snmp-trap-generic-type\",\n-                                \"required\": true,\n+                                \"name\": \"Reject Zero-Byte Files\",\n+                                \"required\": false,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-host\",\n-                                \"required\": true,\n+                                \"name\": \"Remote Path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-port\",\n-                                \"required\": true,\n+                                \"name\": \"Temporary Filename\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-oid-value\": {\n-                                \"dependencies\": [\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"The value of the trap OID.\",\n-                                \"displayName\": \"Trap OID Value\",\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-oid-value\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-specific-type\": {\n-                                \"dependencies\": [\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"6\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Generic Trap Type\",\n-                                        \"propertyName\": \"snmp-trap-generic-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-specific-type\",\n-                                \"required\": false,\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"ftp-use-utf8\": {\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\": \"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\": \"snmp-version\",\n+                                \"name\": \"ftp-use-utf8\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.GetFTP\"\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\": \"FlowFiles that are successfully sent will be 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+                                \"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                                 \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"send\",\n-                            \"snmp\",\n-                            \"trap\"\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.snmp.processors.SendTrapSNMP\",\n-                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -69068,386 +75733,186 @@\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                         \"multiProcessorUseCases\": [],\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-                                \"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+                            \"Conflict Resolution Strategy\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"HMAC256SHA384\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\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\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\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\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n-                                \"dependencies\": [\n+                            \"Create Missing Directories\": {\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\": \"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\": \"snmp-community\",\n+                                \"name\": \"Create Missing Directories\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Hostname\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-hostname\",\n+                                \"name\": \"Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"snmp-private-protocol\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-retries\",\n+                                \"name\": \"Group\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-security-level\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\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+                            \"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\": \"snmp-security-name\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Count\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-version\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\"\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\": \"Files that have been successfully written to the output directory are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that failed during the SNMP Set care 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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"oid\",\n-                            \"set\",\n-                            \"snmp\"\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.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+                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jslt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -69460,168 +75925,109 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"jslt-transform-pretty_print\": {\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\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n-                                \"displayName\": \"Pretty Print\",\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\": \"jslt-transform-pretty_print\",\n+                                \"name\": \"put-record-include-zero-record-results\",\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+                            \"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\": \"jslt-transform-result-filter\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"jslt-transform-transformation\",\n+                                \"name\": \"put-record-reader\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"TEXT\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"jslt-transform-transformation-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n-                                        \"displayName\": \"Entire FlowFile\",\n-                                        \"value\": \"ENTIRE_FLOWFILE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Apply transformation each JSON Object in an array\",\n-                                        \"displayName\": \"Each JSON Object\",\n-                                        \"value\": \"EACH_OBJECT\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"EACH_OBJECT\",\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+                            \"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\": \"jslt-transform-transformation-strategy\",\n+                                \"name\": \"put-record-sink\",\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.record.sink.RecordSinkService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\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\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON), it will be routed to this relationship\",\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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"jslt\",\n-                            \"json\",\n-                            \"transform\"\n+                            \"put\",\n+                            \"record\",\n+                            \"sink\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-amqp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -69630,682 +76036,569 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"AMQP Version\",\n+                                \"name\": \"Batch Size\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Host Name\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\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                                 \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": false,\n+                                \"name\": \"Conflict Resolution\",\n+                                \"required\": true,\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+                            \"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\": \"Queue\",\n+                                \"name\": \"Connection Timeout\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Virtual Host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.acknowledge\": {\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\": \" 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\": \"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\": \"auto.acknowledge\",\n+                                \"name\": \"Create Directory\",\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+                            \"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\": \"batch.size\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cert-authentication\": {\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\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\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\": \"cert-authentication\",\n+                                \"name\": \"Disable Directory Listing\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"header.format\": {\n+                            \"Dot Rename\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"header.key.prefix\",\n-                                \"required\": true,\n+                                \"name\": \"Dot Rename\",\n+                                \"required\": false,\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+                            \"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\": \"header.separator\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"prefetch.count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\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+                            \"Http Proxy Password\": {\n+                                \"description\": \"Http Proxy Password\",\n+                                \"displayName\": \"Http Proxy Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"remove.curly.braces\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": 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+                            \"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\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Http Proxy 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.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received from the AMQP queue 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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The exchange from which AMQP Message was received\",\n-                                \"name\": \"amqp$exchange\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-amqp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"AMQP Version\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Key Algorithms Allowed\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Brokers\",\n+                                \"name\": \"Key Exchange Algorithms Allowed\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Exchange Name\",\n-                                \"required\": true,\n+                                \"name\": \"Last Modified Time\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Host Name\",\n+                                \"name\": \"Message Authentication Codes Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Permissions\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port that the remote system is listening on for file transfers\",\n                                 \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Port\",\n-                                \"required\": false,\n+                                \"required\": true,\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+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Routing Key\",\n-                                \"required\": true,\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\": \"Environment variables 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-                            \"User Name\": {\n-                                \"description\": \"User Name used for authentication and authorization.\",\n-                                \"displayName\": \"User Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"User Name\",\n+                                \"name\": \"Proxy Host\",\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+                            \"Proxy Port\": {\n+                                \"description\": \"The port of the proxy server\",\n+                                \"displayName\": \"Proxy Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Virtual Host\",\n+                                \"name\": \"Proxy Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cert-authentication\": {\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+                            \"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\": \"false\",\n-                                \"description\": \"Authenticate using the SSL certificate rather than user name/password.\",\n-                                \"displayName\": \"Use Client Certificate Authentication\",\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\": \"cert-authentication\",\n+                                \"name\": \"Reject Zero-Byte Files\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Group\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"header.separator\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Temporary Filename\",\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+                            \"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\": \"ssl-context-service\",\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\": \"Environment variables 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: 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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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.standard.GetSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are sent to the AMQP destination are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be routed to the AMQP destination are routed to this relationship\",\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                                 \"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                         \"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+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n                             \"put\",\n-                            \"rabbit\",\n-                            \"send\"\n+                            \"remote\",\n+                            \"sftp\"\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+                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70313,298 +76606,237 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Input Language\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Target Language\": {\n-                                \"defaultValue\": \"en\",\n-                                \"description\": \"The language to translate the text into\",\n-                                \"displayName\": \"Target Language\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Target Language\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Translate Content\": {\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\": \"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+                                \"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\": \"Translate Content\",\n-                                \"required\": true,\n+                                \"name\": \"Obtain Generated Keys\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Yandex API Key\": {\n-                                \"description\": \"The API Key that is registered with Yandex\",\n-                                \"displayName\": \"Yandex API Key\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Yandex API Key\",\n-                                \"required\": true,\n+                                \"name\": \"Support Fragmented Transactions\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                            {\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-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"language\",\n-                            \"translate\",\n-                            \"translation\",\n-                            \"yandex\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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. 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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"groovyx-additional-classpath\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transaction Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"groovyx-failure-strategy\": {\n+                            \"database-session-autocommit\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"rollback\",\n-                                        \"value\": \"rollback\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"transfer to failure\",\n-                                        \"value\": \"transfer to failure\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"groovyx-failure-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"database-session-autocommit\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"groovyx-script-body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putsql-sql-statement\",\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+                            \"rollback-on-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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"groovyx-script-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rollback-on-failure\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": 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.script.ExecuteScript\"\n+                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\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                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to be processed\",\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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"groovyx\",\n-                            \"script\"\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.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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-email-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\",\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\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70613,253 +76845,240 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\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+                            \"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\": \"Mark Messages as Read\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use SSL\": {\n-                                \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use SSL\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\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+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The IP address or hostname of the Syslog server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"authorization-mode\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.timeout\",\n+                                \"name\": \"Idle Connection Expiration\",\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+                            \"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\": \"delete.messages\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\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+                            \"Message Body\": {\n+                                \"description\": \"The body for the Syslog messages.\",\n+                                \"displayName\": \"Message Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fetch.size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Body\",\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+                            \"Message Hostname\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"The hostname for the Syslog messages.\",\n+                                \"displayName\": \"Message Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Hostname\",\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+                            \"Message Priority\": {\n+                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n+                                \"displayName\": \"Message Priority\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"host\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n+                            \"Protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\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\": \"oauth2-access-token-provider\",\n+                                \"name\": \"Protocol\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"password\": {\n+                            \"SSL Context Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user\",\n-                                \"required\": true,\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\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\": \"All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship\",\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+                            },\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Email\",\n-                            \"Get\",\n-                            \"Imap\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Message\"\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.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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70868,282 +77087,270 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\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+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection.timeout\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete.messages\": {\n+                            \"Connection Per 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\": \"Specify whether mail messages should be deleted after retrieval.\",\n-                                \"displayName\": \"Delete Messages\",\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\": \"delete.messages\",\n+                                \"name\": \"Connection Per FlowFile\",\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+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fetch.size\",\n+                                \"name\": \"Hostname\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"Idle Connection Expiration\",\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+                            \"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\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"host\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"oauth2-access-token-provider\": {\n+                            \"Record Reader\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"oauth-based-authorization-mode\"\n+                                            \"RECORD_ORIENTED\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"OAuth2 service that can provide access tokens.\",\n-                                \"displayName\": \"OAuth2 Access Token Provider\",\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\": \"oauth2-access-token-provider\",\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.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"password\": {\n+                            \"Record Writer\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"password-based-authorization-mode\"\n+                                            \"RECORD_ORIENTED\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authorization Mode\",\n-                                        \"propertyName\": \"authorization-mode\"\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Password used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"Password\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\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.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"port\": {\n-                                \"description\": \"Numeric value identifying Port of Email server (e.g., 993)\",\n-                                \"displayName\": \"Port\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"port\",\n-                                \"required\": true,\n+                                \"name\": \"Timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user\": {\n-                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n-                                \"displayName\": \"User Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transmission Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\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\": \"All messages that are the are successfully received from Email server and converted to 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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that could not be parsed\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original file\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"tcp\"\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.PutTCP\",\n+                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.attachment.parent.filename \"\n-                            },\n-                            {\n-                                \"description\": \"The UUID of the original FlowFile.\",\n-                                \"name\": \"email.attachment.parent.uuid\"\n-                            },\n-                            {\n-                                \"description\": \"The mime type of the attachment.\",\n-                                \"name\": \"mime.type\"\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-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71156,1571 +77363,1523 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"Destination hostname or IP address\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CAPTURED_HEADERS\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"STRICT_ADDRESS_PARSING\": {\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-                                        \"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-                                        \"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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"STRICT_ADDRESS_PARSING\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Port\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": 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\": \"Extraction was successful\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"split\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"udp\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\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+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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\": \"ENVIRONMENT\",\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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n-                            },\n-                            {\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename of the attachment\",\n-                                \"name\": \"filename \"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"email.tnef.attachment.parent.filename \"\n-                            },\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"CLIENT_AUTH\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    }\n-                                ],\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\": \"CLIENT_AUTH\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_HOSTNAME\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n                                 \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_PORT\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SMTP_TIMEOUT\",\n+                                \"name\": \"Database Connection Pooling Service\",\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+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All new messages will be routed as FlowFiles 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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"email\",\n-                            \"listen\",\n-                            \"smtp\"\n-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Fetch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The values used during RCPT TO (i.e. envelope)\",\n-                                \"name\": \"smtp.recipient.*\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"domain\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"enable-dfs\": {\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-                                \"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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Set Auto Commit\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"defaultValue\": \"445\",\n-                                \"description\": \"Port to use for connection.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"port\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"share\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\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\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\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\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\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\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\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\": \"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+                                \"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\": \"smb-dialect\",\n+                                \"name\": \"db-fetch-db-type\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"use-encryption\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\n-                        },\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+                                \"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\": \"cache-expiration\",\n+                                \"name\": \"dbf-normalize\",\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+                            \"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 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\": \"cache-size\",\n+                                \"name\": \"dbf-user-logical-types\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"initial-load-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\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-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\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\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"initial-load-strategy\",\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\": \"Environment variables 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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-comment-body\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-frags\",\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\": \"Environment variables 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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-rows\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-subject\": {\n-                                \"description\": \"The content or the path to the subject in the incoming record.\",\n-                                \"displayName\": \"Subject\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-output-batch-size\",\n+                                \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"transaction-isolation-level\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M3\"\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"record\",\n-                            \"sink\",\n-                            \"zendesk\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-social-media-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": true,\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 Environment/System properties 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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"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\": \"ENVIRONMENT\",\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-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" property to specify a Connection Pool that is applicable for interacting with your database.\\n\\nSet the \\\"Catalog\\\" property to the name of the database Catalog;\\nset the \\\"Schema Pattern\\\" property to a Java Regular Expression that matches all database Schemas that should be included; and\\nset the \\\"Table Name Pattern\\\" property to a Java Regular Expression that matches the names of all tables that should be included.\\nIn order to perform an incremental load of all tables, leave the Catalog, Schema Pattern, and Table Name Pattern unset.\\n\\nLeave the RecordWriter property unset.\\n\\nConnect the 'success' relationship to QueryDatabaseTableRecord.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.ListDatabaseTables\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to the same Connection Pool that was used in ListDatabaseTables.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to \\\"${db.table.fullname}\\\"\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.QueryDatabaseTableRecord\"\n+                                    }\n+                                ],\n+                                \"description\": \"Perform an incremental load of multiple database tables, fetching only new rows as they are added to the tables.\",\n+                                \"keywords\": [\n+                                    \"incremental load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backfill-minutes\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Columns to Return\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-attempts\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Fetch Size\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"base-path\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Maximum-value Columns\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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\": \"bearer-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"connect-timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Set Auto Commit\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expansions\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"maximum-backoff-time\",\n+                                \"name\": \"db-fetch-db-type\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"media-fields\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"db-fetch-sql-query\",\n                                 \"required\": false,\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+                            \"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\": \"place-fields\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-fetch-where-clause\",\n                                 \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"poll-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-precision\",\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+                            \"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\": \"queue-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbf-default-scale\",\n                                 \"required\": true,\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+                            \"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 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\": \"read-timeout\",\n+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"stream-endpoint\": {\n+                            \"initial-load-strategy\": {\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\": \"Loads all existing rows from the database table.\",\n+                                        \"displayName\": \"Start at Beginning\",\n+                                        \"value\": \"Start at Beginning\"\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\": \"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\": \"Sample Endpoint\",\n-                                \"description\": \"The source from which the processor will consume Tweets.\",\n-                                \"displayName\": \"Stream Endpoint\",\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\": \"stream-endpoint\",\n+                                \"name\": \"initial-load-strategy\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-max-rows\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"qdbt-output-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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 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\": \"tweet-fields\",\n-                                \"required\": false,\n+                                \"name\": \"qdbtr-normalize\",\n+                                \"required\": true,\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+                            \"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\": \"user-fields\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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\": \"2.0.0-M3\"\n+                                }\n                             }\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\": \"FlowFiles containing an array of one or more Tweets\",\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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"social media\",\n-                            \"status\",\n-                            \"tweets\",\n-                            \"twitter\"\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.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-                        \"useCases\": [],\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 Environment/System properties 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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Beginning\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                \"description\": \"Retrieve all rows from a database table.\",\n+                                \"keywords\": [\n+                                    \"jdbc\",\n+                                    \"rdbms\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the \\\"Database Connection Pooling Service\\\" to specify a Connection Pooling Service so that the Processor knows how to connect to the database.\\nSet the \\\"Database Type\\\" property to the type of database to query, or \\\"Generic\\\" if the database vendor is not listed.\\nSet the \\\"Table Name\\\" property to the name of the table to retrieve records from.\\nConfigure the \\\"Record Writer\\\" to specify a Record Writer that is appropriate for the desired output format.\\nSet the \\\"Maximum-value Columns\\\" property to a comma-separated list of columns whose values can be used to determine which values are new. For example, this might be set to\\n    an `id` column that is a one-up number, or a `last_modified` column that is a timestamp of when the row was last modified.\\nSet the \\\"Initial Load Strategy\\\" property to \\\"Start at Current Maximum Values\\\".\\nSet the \\\"Fetch Size\\\" to a number that avoids loading too much data into memory on the NiFi side. For example, a value of `1000` will load up to 1,000 rows of data.\\nSet the \\\"Max Rows Per Flow File\\\" to a value that allows efficient processing, such as `1000` or `10000`.\\nSet the \\\"Output Batch Size\\\" property to a value greater than `0`. A smaller value, such as `1` or even `20` will result in lower latency but also slightly lower throughput.\\n    A larger value such as `1000` will result in higher throughput but also higher latency. It is not recommended to set the value larger than `1000` as it can cause significant\\n    memory utilization.\\n\",\n+                                \"description\": \"Perform an incremental load of a single database table, fetching only new rows as they are added to the table.\",\n+                                \"keywords\": [\n+                                    \"incremental load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The MIME Type set to application/json\",\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                             },\n                             {\n-                                \"description\": \"The number of Tweets in the FlowFile\",\n-                                \"name\": \"tweets\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"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+                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Date Format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\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\": \"Password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Protection Type\": {\n+                            \"cache-schema\": {\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\": \"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\": \"Protection Type\",\n+                                \"name\": \"cache-schema\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Required Sheets\",\n-                                \"required\": false,\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Starting Row\",\n+                                \"name\": \"dbf-default-scale\",\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+                            \"include-zero-record-flowfiles\": {\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\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\": \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"name\": \"include-zero-record-flowfiles\",\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\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\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"schema-registry\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\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+                            \"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\": \"schema-registry\",\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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n-                                \"required\": false,\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\": \"2.0.0-M3\"\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-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cell\",\n-                            \"excel\",\n-                            \"parse\",\n-                            \"reader\",\n+                            \"aggregate\",\n+                            \"avro\",\n+                            \"calcite\",\n+                            \"csv\",\n+                            \"etl\",\n+                            \"filter\",\n+                            \"json\",\n+                            \"logs\",\n+                            \"modify\",\n+                            \"query\",\n                             \"record\",\n-                            \"row\",\n-                            \"spreadsheet\",\n-                            \"values\",\n-                            \"xlsx\"\n+                            \"route\",\n+                            \"select\",\n+                            \"sql\",\n+                            \"text\",\n+                            \"transform\",\n+                            \"update\"\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-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-6-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep. I.e., it is the exact opposite of what we want to remove.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to remove records where either the name is George OR the age is less than 18, we would add a   property named \\\"adults not george\\\" with a value that selects records where the name is not George AND the age is greater than or equal to 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"name\\\" <> 'George' AND \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults not george\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Filter out records based on the values of the records' fields\",\n+                                \"keywords\": [\n+                                    \"filter out\",\n+                                    \"remove\",\n+                                    \"drop\",\n+                                    \"strip out\",\n+                                    \"record field\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE` for relevant rows.\\nThe WHERE clause selects the data to keep.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only records where the person is an adult (aged 18 or older), add a property named \\\"adults\\\"   with a value that is a SQL statement that selects records where the age is at least 18.   So the value would be `SELECT * FROM FLOWFILE WHERE \\\"age\\\" >= 18`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the \\\"adults\\\" Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Keep only specific records\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"retain\",\n+                                    \"select\",\n+                                    \"include\",\n+                                    \"record\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nOne additional property should be added.\\nThe name of the property should be a short description of the data to keep, such as `relevant fields`.\\nIts value is a SQL statement that selects the desired columns from a table named `FLOW_FILE` for relevant rows.\\nThere is no WHERE clause.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\nFor example, to keep only the `name`, `age`, and `address` fields, add a property named `relevant fields`   with a value of `SELECT \\\"name\\\", \\\"age\\\", \\\"address\\\" FROM FLOWFILE`\\n\\nAdding this property now gives us a new Relationship whose name is the same as the property name. So, the `relevant fields` Relationship should be connected to the next Processor in our flow.\\n\",\n+                                \"description\": \"Keep only specific fields in a a Record, where the names of the fields to keep are known\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"retain\",\n+                                    \"select\",\n+                                    \"include\",\n+                                    \"record\",\n+                                    \"fields\",\n+                                    \"sql\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Record Reader\\\" should be set to a Record Reader that is appropriate for your data.\\n\\\"Record Writer\\\" should be set to a Record Writer that writes out data in the desired format.\\n\\nFor each route that you want to create, add a new property.\\nThe name of the property should be a short description of the data that should be selected for the route.\\nIts value is a SQL statement that selects all columns from a table named `FLOW_FILE`. The WHERE clause selects the data that should be included in the route.\\nIt is recommended to always quote column names using double-quotes in order to avoid conflicts with SQL keywords.\\n\\nA new outbound relationship is created for each property that is added. The name of the relationship is the same as the property name.\\n\\nFor example, to route data based on whether or not it is a large transaction, we would add two properties:\\n`small transaction` would have a value such as `SELECT * FROM FLOWFILE WHERE transactionTotal < 100`\\n`large transaction` would have a value of `SELECT * FROM FLOWFILE WHERE transactionTotal >= 100`\\n\",\n+                                \"description\": \"Route record-oriented data for processing based on its contents\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"route\",\n+                                    \"conditional processing\",\n+                                    \"field\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\n+                            {\n+                                \"description\": \"The relation to which the FlowFile was routed\",\n+                                \"name\": \"QueryRecord.Route\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Any field that matches the RecordPath set as the value will be removed.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A description of the field to remove\",\n+                                \"value\": \"A RecordPath to the field to be removed.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\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-                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"compression.type\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\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+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"2.0.0-M3\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\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-                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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+                        \"supportsDynamicRelationships\": 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+                        ],\n+                        \"triggerSerially\": false,\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the Record Reader according to the incoming data format.\\nConfigure the Record Writer according to the desired output format.\\n\\nFor each field that you want to remove, add a single new property to the Processor.\\nThe name of the property can be anything but it's recommended to use a brief description of the field.\\nThe value of the property is a RecordPath that matches the field to remove.\\n\\nFor example, to remove the `name` and `email` fields, add two Properties:\\n`name` = `/name`\\n`email` = `/email`\\n\",\n+                                \"description\": \"Remove one or more fields from a Record, where the names of the fields to remove are known.\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"field\",\n+                                    \"drop\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expunge\",\n+                                    \"recordpath\"\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+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 a new name for each field that matches the RecordPath.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"A RecordPath that identifies which field(s) to update\",\n+                                \"value\": \"The new name to assign to the Record field\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\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                                 \"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\": \"2.0.0-M3\"\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 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\": \"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\": \"2.0.0-M3\"\n                                 }\n-                            },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.RemoveRecordField\",\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\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\": \"2.0.0-M3\"\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+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"kafka\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"field\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n                             \"record\",\n-                            \"sink\"\n+                            \"rename\",\n+                            \"schema\",\n+                            \"update\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.RenameRecordField\",\n+                        \"typeDescription\": \"Renames one or more fields in each Record of a FlowFile. 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 the new name to assign to the Record Field that matches the RecordPath. The property value may use Expression Language to reference FlowFile attributes as well as the variables `field.name`, `field.value`, `field.type`, and `record.index`\",\n+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is the new name of the property.\\n\\nFor example, to rename the `name` field to `full_name`, add a property with a name of `/name` and a value of `full_name`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a specific, known name.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"static\",\n+                                    \"specific\",\n+                                    \"name\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that can be used to determine the new name of the field.\\n\\nFor example, to rename the `addr` field to whatever value is stored in the `preferred_address_name` attribute, add a property with a name of `/name` and a value of `${preferred_address_name}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a name that is derived from a FlowFile attribute.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"expression language\",\n+                                    \"EL\",\n+                                    \"flowfile\",\n+                                    \"attribute\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"Configure the 'Record Reader' according to the input format.\\nConfigure the 'Record Writer' according to the desired output format.\\n\\nAdd a property to the Processor such that the name of the property is a RecordPath to identifies the field to rename. The value of the property is an Expression Language expression that references the `field.name` property.\\n\\nFor example, to rename all fields with a prefix of `pre_`, we add a property named `/*` and a value of `pre_${field.name}`. If we would like this to happen recursively, to nested fields as well, we use a property name of `//*` with the value of `pre_${field.name}`.\\n\\nTo make all field names uppercase, we can add a property named `//*` with a value of `${field.name:toUpper()}`.\\n\\nMany properties can be added following this pattern in order to rename multiple fields.\\n\",\n+                                \"description\": \"Rename a field in each Record to a new name that is derived from the current field name.\",\n+                                \"keywords\": [\n+                                    \"rename\",\n+                                    \"field\",\n+                                    \"expression language\",\n+                                    \"EL\",\n+                                    \"field.name\"\n+                                ],\n+                                \"notes\": \"This might be used, for example, to add a prefix or a suffix to some fields, or to transform the name of the field by making it uppercase.\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72728,678 +78887,641 @@\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\": \"ENVIRONMENT\",\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\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+                            \"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\": \"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+                                \"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\": \"Communications Timeout\",\n+                                \"name\": \"Evaluation Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"auto.offset.reset\": {\n+                            \"Line-by-Line Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"All\"\n                                     },\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First-Line\",\n+                                        \"value\": \"First-Line\"\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\": \"Last-Line\",\n+                                        \"value\": \"Last-Line\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Except-First-Line\",\n+                                        \"value\": \"Except-First-Line\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Except-Last-Line\",\n+                                        \"value\": \"Except-Last-Line\"\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\": \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"name\": \"Line-by-Line Evaluation Mode\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"(?s)(^.*$)\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_VALUE\"\n+                                            \"Regex Replace\",\n+                                            \"Literal Replace\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement 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+                                \"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\": \"header-name-regex\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\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\": \"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-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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"key-attribute-encoding\": {\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\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\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\": \"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\": \"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\": \"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+                                        \"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-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\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-                                \"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\": \"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\": \"key-attribute-encoding\",\n+                                \"name\": \"Replacement Strategy\",\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+                            \"Replacement Value\": {\n+                                \"defaultValue\": \"$1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n+                                            \"Prepend\",\n+                                            \"Regex Replace\",\n+                                            \"Always Replace\",\n+                                            \"Append\",\n+                                            \"Literal Replace\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n-                                \"displayName\": \"Key Format\",\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\": \"key-format\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Replacement Value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-record-reader\": {\n+                            \"Text to Append\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"record\"\n+                                            \"Surround\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"key-format\"\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\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 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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Text to Append\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n+                            \"Text to Prepend\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"Surround\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\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+                                \"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\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                            \"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+                                \"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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                            \"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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Append\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be appended to the line.\\nFor example, to insert the text `<fin>` at the end of every line, we would set \\\"Replacement Value\\\" to `<fin>`.\\nWe can also use Expression Language. So to insert the filename at the end of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n+                                \"description\": \"Append text to the end of every line in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"raw text\",\n+                                    \"append\",\n+                                    \"line\"\n+                                ],\n+                                \"notes\": \"\"\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+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Prepend\\\"\\n\\n\\\"Replacement Value\\\" is set to whatever text should be prepended to the line.\\nFor example, to insert the text `<start>` at the beginning of every line, we would set \\\"Replacement Value\\\" to `<start>`.\\nWe can also use Expression Language. So to insert the filename at the beginning of every line, we set \\\"Replacement Value\\\" to `${filename}`\\n\",\n+                                \"description\": \"Prepend text to the beginning of every line in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"raw text\",\n+                                    \"prepend\",\n+                                    \"line\"\n+                                ],\n+                                \"notes\": \"\"\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+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Literal Replace\\\"\\n\\\"Search Value\\\" is set to whatever text is in the FlowFile that needs to be replaced.\\n\\\"Replacement Value\\\" is set to the text that should replace the current text.\\n\\nFor example, to replace the word \\\"spider\\\" with \\\"arachnid\\\" we set \\\"Search Value\\\" to `spider` and set \\\"Replacement Value\\\" to `arachnid`.\\n\",\n+                                \"description\": \"Replace every occurrence of a literal string in the FlowFile with a different value\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"string\",\n+                                    \"text\",\n+                                    \"literal\"\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Line-by-Line\\\"\\n\\\"Replacement Strategy\\\" = \\\"Regex Replace\\\"\\n\\\"Search Value\\\" is set to a regular expression that matches the text that should be transformed in a capturing group.\\n\\\"Replacement Value\\\" is set to a NiFi Expression Language expression that references `$1` (in quotes to escape the reference name).\\n\\nFor example, if we wanted to lowercase any occurrence of WOLF, TIGER, or LION, we would use a \\\"Search Value\\\" of `(WOLF|TIGER|LION)` and a \\\"Replacement Value\\\" of `${'$1':toLower()}`.\\nIf we want to replace any identifier with a hash of that identifier, we might use a \\\"Search Value\\\" of `identifier: (.*)` and a \\\"Replacement Value\\\" of `identifier: ${'$1':hash('sha256')}`\\n\",\n+                                \"description\": \"Transform every occurrence of a literal string in a FlowFile\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"transform\",\n+                                    \"raw text\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Evaluation Mode\\\" = \\\"Entire text\\\"\\n\\\"Replacement Strategy\\\" = \\\"Always Replace\\\"\\n\\n\\\"Replacement Value\\\" is set to the new text that should be written to the FlowFile. This text might include NiFi Expression Language to reference one or more attributes.\\n\",\n+                                \"description\": \"Completely replace the contents of a FlowFile to a specific text\",\n+                                \"keywords\": [\n+                                    \"replace\",\n+                                    \"raw text\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"output-strategy\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"record-reader\",\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.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\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 Value Writer\",\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\": \"record-writer\",\n+                                \"name\": \"Mapping File Refresh 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.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n+                                \"name\": \"Matching Group\",\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+                            \"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\": \"sasl.mechanism\",\n+                                \"name\": \"Maximum Buffer Size\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\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-                            \"sasl.token.auth\": {\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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-                                \"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 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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"name\": \"Fail on Non-numerical Overwrite\",\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+                            \"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\": \"security.protocol\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\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\": \"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+                                \"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\": \"separate-by-key\",\n-                                \"required\": false,\n+                                \"name\": \"penalize-retries\",\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\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"retry-attribute\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n+                            \"reuse-mode\": {\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\": \"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\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\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\": \"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\": \"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\": \"topic_type\",\n+                                \"name\": \"reuse-mode\",\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+                        \"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\": 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-                                \"name\": \"success\"\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\": \"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\": \"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+                            {\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": 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+                            \"FlowFile\",\n+                            \"Retry\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n+                                \"name\": \"Retry Attribute\"\n                             },\n                             {\n-                                \"description\": \"The topic records are from\",\n-                                \"name\": \"kafka.topic\"\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-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -73409,546 +79531,533 @@\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\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\n+                                \"description\": \"Routes FlowFiles whose attributes match the 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\": \"Expression Language expression that returns a boolean value indicating whether or not the FlowFile should be routed to this Relationship\"\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_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"configuration\": \"Choose a RecordReader that is appropriate based on the format of the incoming data.\\nChoose a RecordWriter that writes the data in the desired output format.\\n\\nAdd a single additional property. The name of the property should describe the criteria to route on. The property's value should be a RecordPath that returns `true` if the Record meets the criteria or `false` otherwise. This adds a new attribute to the FlowFile whose name is equal to the property name.\\n\\nConnect the 'success' Relationship to RouteOnAttribute.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.PartitionRecord\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"configuration\": \"Set \\\"Routing Strategy\\\" to \\\"Route to Property name\\\"\\n\\nAdd two additional properties. For the first one, the name of the property should describe data that matches the criteria. The value is an Expression Language expression that checks if the attribute added by the PartitionRecord processor has a value of `true`. For example, `${criteria:equals('true')}`.\\nThe second property should have a name that describes data that does not match the criteria. The value is an Expression Language that evaluates to the opposite of the first property value. For example, `${criteria:equals('true'):not()}`.\\n\\nConnect each of the newly created Relationships to the appropriate downstream processors.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\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+                                \"description\": \"Route record-oriented data based on whether or not the record's values meet some criteria\",\n+                                \"keywords\": [\n+                                    \"record\",\n+                                    \"route\",\n+                                    \"content\",\n+                                    \"data\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\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\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\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\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\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\": \"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\": \"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\": \"auto.offset.reset\",\n+                                \"name\": \"Routing Strategy\",\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+                        },\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": 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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set the \\\"Routing Strategy\\\" property to \\\"Route to Property name\\\".\\nFor each route that a FlowFile might be routed to, add a new property. The name of the property should describe the route.\\nThe value of the property is an Attribute Expression Language expression that returns a boolean value indicating whether or not a given FlowFile will be routed to the associated relationship.\\n\\nFor example, we might route data based on its file extension using the following properties:\\n    - \\\"Routing Strategy\\\" = \\\"Route to Property Name\\\"\\n    - \\\"jpg\\\" = \\\"${filename:endsWith('.jpg')}\\\"\\n    - \\\"png\\\" = \\\"${filename:endsWith('.png')}\\\"\\n    - \\\"pdf\\\" = \\\"${filename:endsWith('.pdf')}\\\"\\n\\nThe Processor will now have 3 relationships: `jpg`, `png`, and `pdf`. Each of these should be connected to the appropriate downstream processor.\\n\",\n+                                \"description\": \"Route data to one or more relationships based on its attributes using the NiFi Expression Language.\",\n+                                \"keywords\": [\n+                                    \"attributes\",\n+                                    \"routing\",\n+                                    \"expression language\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"notes\": \"\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to keep the data.\\nIf the data should be kept in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to keep the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nFor example, to keep files whose filename ends with .txt and have a file size of at least 1000 bytes, we will use the following properties:\\n    - \\\"ends_with_txt\\\" = \\\"${filename:endsWith('.txt')}\\\"\\n    - \\\"large_enough\\\" = \\\"${fileSize:ge(1000)}\\n    - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'unmatched' relationship.\\nConnect the 'matched' relationship to the next processor in the flow.\\n\",\n+                                \"description\": \"Keep data only if its attributes meet some criteria, such as its filename ends with .txt.\",\n+                                \"keywords\": [\n+                                    \"keep\",\n+                                    \"filter\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\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+                            {\n+                                \"configuration\": \"Add a new property for each condition that must be satisfied in order to drop the data.\\nIf the data should be dropped in the case that any of the provided conditions is met, set the \\\"Routing Strategy\\\" property to \\\"Route to 'matched' if any matches\\\".\\nIf all conditions must be met in order to drop the data, set the \\\"Routing Strategy\\\" property  to \\\"Route to 'matched' if all match\\\".\\n\\nHere are a couple of examples for configuring the properties:\\n    Example 1 Use Case: Data should be dropped if its \\\"uuid\\\" attribute has an 'a' in it or ends with '0'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_0\\\" = \\\"${uuid:endsWith('0')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if any matches\\\"\\n    Example 2 Use Case: Data should be dropped if its 'uuid' attribute has an 'a' AND it ends with a '1'.\\n      Here, we will use the following properties:\\n        - \\\"has_a\\\" = \\\"${uuid:contains('a')}\\\"\\n        - \\\"ends_with_1\\\" = \\\"${uuid:endsWith('1')}\\n        - \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n\\nAuto-terminate the 'matched' relationship.\\nConnect the 'unmatched' relationship to the next processor in the flow.\\n\",\n+                                \"description\": \"Discard or drop a file based on attributes, such as filename.\",\n+                                \"keywords\": [\n+                                    \"discard\",\n+                                    \"drop\",\n+                                    \"filter\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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\": \"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+                        \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"group.id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n+                                \"name\": \"Content Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n+                            \"Match Requirement\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"content must match exactly\",\n+                                        \"value\": \"content must match exactly\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"content must contain match\",\n+                                        \"value\": \"content must contain match\"\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\": \"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\": \"honor-transactions\",\n+                                \"name\": \"Match Requirement\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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\": \"2.0.0-M3\"\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+                            }\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": 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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"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+                        \"multiProcessorUseCases\": [],\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\": \"key-attribute-encoding\",\n+                                \"name\": \"Character Set\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"message-header-encoding\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"name\": \"Grouping Regular Expression\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"sasl.token.auth\": {\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-                                \"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 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\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"Ignore Case\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"Matching Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\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\": \"SSL\",\n-                                        \"value\": \"SSL\"\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\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\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\": \"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+                                        \"description\": \"Match lines based on whether the line contains the property value\",\n+                                        \"displayName\": \"Contains\",\n+                                        \"value\": \"Contains\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\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-                                \"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+                                \"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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"topic\",\n+                                \"name\": \"Matching Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"topic_type\": {\n+                            \"Routing 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\": \"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\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\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\": \"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\": \"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\": \"topic_type\",\n+                                \"name\": \"Routing Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\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-                                \"name\": \"success\"\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\": \"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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicRelationships\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"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+                        \"useCases\": [\n                             {\n-                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n-                                \"name\": \"kafka.timestamp\"\n+                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Matches Regular Expression\\\"\\n\\\"Empty Line\\\" = \\\"^$\\\"\\n\\nAuto-terminate the \\\"Empty Line\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n+                                \"description\": \"Drop blank or empty lines from the FlowFile's content.\",\n+                                \"keywords\": [\n+                                    \"filter\",\n+                                    \"drop\",\n+                                    \"empty\",\n+                                    \"blank\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"strip out\",\n+                                    \"lines\",\n+                                    \"text\"\n+                                ],\n+                                \"notes\": \"\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n-                            },\n+                                \"configuration\": \"\\\"Routing Strategy\\\" = \\\"Route to each matching Property Name\\\"\\n\\\"Matching Strategy\\\" = \\\"Satisfies Expression\\\"\\n\\nAn additional property should be added named \\\"Filter Out.\\\" The value should be a NiFi Expression Language Expression that can refer to two variables (in addition to FlowFile attributes): `line`, which is the line of text being evaluated; and `lineNo`, which is the line number in the file (starting with 1). The Expression should return `true` for any line that should be dropped.\\n\\nFor example, to remove any line that starts with a # symbol, we can set \\\"Filter Out\\\" to `${line:startsWith(\\\"#\\\")}`.\\nWe could also remove the first 2 lines of text by setting \\\"Filter Out\\\" to `${lineNo:le(2)}`. Note that we use the `le` function because we want lines numbers less than or equal to `2`, since the line index is 1-based.\\n\\nAuto-terminate the \\\"Filter Out\\\" relationship.\\nConnect the \\\"unmatched\\\" relationship to the next processor in your flow.\\n\",\n+                                \"description\": \"Remove specific lines of text from a file, such as those containing a specific word or having a line length over some threshold.\",\n+                                \"keywords\": [\n+                                    \"filter\",\n+                                    \"drop\",\n+                                    \"empty\",\n+                                    \"blank\",\n+                                    \"remove\",\n+                                    \"delete\",\n+                                    \"strip out\",\n+                                    \"lines\",\n+                                    \"text\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The name of the relationship to which the FlowFile was routed.\",\n+                                \"name\": \"RouteText.Route\"\n                             },\n                             {\n-                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n-                                \"name\": \"kafka.tombstone\"\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\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -73956,1244 +80065,1707 @@\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\": \"ENVIRONMENT\",\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"Failure Strategy\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"sample-record-interval\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n+                                            \"interval\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-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+                                \"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\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-interval\",\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+                            \"sample-record-probability\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"probabilistic\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"acks\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-probability\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n+                            \"sample-record-random-seed\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"USE_VALUE\"\n+                                            \"probabilistic\",\n+                                            \"reservoir\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-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\": \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-random-seed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"aws.profile.name\": {\n+                            \"sample-record-range\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n+                                            \"range\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-range\",\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bootstrap.servers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-reservoir\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"sample-record-sampling-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\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\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\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\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\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\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\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\": \"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\": \"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\": \"compression.type\",\n+                                \"name\": \"sample-record-sampling-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile is routed to this relationship if the sampling completed successfully\",\n+                                \"name\": \"success\"\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                        ],\n+                        \"triggerSerially\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n+                                \"name\": \"Attribute Pattern\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Dictionary File\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"message-header-encoding\",\n+                                \"name\": \"Dictionary Filter Pattern\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-key-field\": {\n-                                \"dependencies\": [\n+                            \"Match Criteria\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\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-                                \"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\": \"Environment variables 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\": \"Environment variables 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 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+                                \"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\": \"partitioner.class\",\n-                                \"required\": false,\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-                            \"publish-strategy\": {\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Dictionary Encoding\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"binary\",\n+                                        \"value\": \"binary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\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\": \"publish-strategy\",\n+                                \"name\": \"Dictionary Encoding\",\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+                            \"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\": \"record-key-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\": \"2.0.0-M3\"\n-                                }\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-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"record-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Segment 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\": \"2.0.0-M3\"\n-                                }\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-                            \"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 original FlowFile will be sent 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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\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+                            },\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+                            },\n+                            {\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"Byte Sequence\",\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"Byte Sequence Format\": {\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\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\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\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\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\": \"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\": \"sasl.mechanism\",\n+                                \"name\": \"Byte Sequence Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n+                            \"Byte Sequence Location\": {\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\": \"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\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence Location\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n+                            \"Keep Byte Sequence\": {\n                                 \"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\": \"Determines whether or not the Byte Sequence should be included with each Split\",\n+                                \"displayName\": \"Keep Byte Sequence\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\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 Splits will be routed to the splits relationship\",\n+                                \"name\": \"splits\"\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+                            {\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JsonPath Expression\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\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\": \"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+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\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\": \"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\": \"security.protocol\",\n+                                \"name\": \"Null Value Representation\",\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 JSON or the specified path does not exist), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\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\": \"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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"topic\",\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                             },\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+                            {\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Header Line Count\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Header Line Marker Characters\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\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\": \"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\": \"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\": \"use-transactions\",\n+                                \"name\": \"Remove Trailing Newlines\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\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\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\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+                            {\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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"Split Depth\",\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+                            {\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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\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-                            \"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+                            \"split\",\n+                            \"xml\"\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.standard.SplitXml\",\n+                        \"typeDescription\": \"Splits an XML File into multiple separate FlowFiles, each comprising a child or descendant of the original root element\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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\": \"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-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"30 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n+                        \"explicitRestrictions\": [\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\": \"ENVIRONMENT\",\n-                                \"name\": \"The name of a Kafka configuration property.\",\n-                                \"value\": \"The value of a given Kafka configuration property.\"\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Failure Strategy\": {\n+                            \"File Location\": {\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+                                        \"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\": \"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+                                        \"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\": \"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+                                \"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\": \"Failure Strategy\",\n+                                \"name\": \"File Location\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"File to Tail\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"Initial Start Position\": {\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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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+                                \"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\": \"acks\",\n+                                \"name\": \"Initial Start Position\",\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+                            \"Line Start Pattern\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n+                                            \"Single file\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Tailing mode\",\n+                                        \"propertyName\": \"tail-mode\"\n                                     }\n                                 ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"aws.profile.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Line Start Pattern\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"64 KB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"propertyDisplayName\": \"Line Start Pattern\",\n+                                        \"propertyName\": \"Line Start Pattern\"\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\": \"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\": \"compression.type\",\n+                                \"name\": \"Max Buffer Size\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Post-Rollover Tail Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Service supporting user authentication with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\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\": \"kerberos-user-service\",\n+                                \"name\": \"Rolling Filename Pattern\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"key-attribute-encoding\": {\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\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n-                                \"required\": true,\n+                                \"name\": \"reread-on-nul\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\n+                                \"name\": \"tail-base-directory\",\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+                            \"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\": \"max.request.size\",\n+                                \"name\": \"tail-mode\",\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\": \"Environment variables 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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n+                                \"name\": \"tailfile-lookup-frequency\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tailfile-maximum-age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n+                            \"tailfile-recursive-lookup\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\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\": \"\",\n+                                        \"displayName\": \"false\",\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\": \"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\": \"partitioner.class\",\n-                                \"required\": false,\n+                                \"name\": \"tailfile-recursive-lookup\",\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+                            }\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\": \"All 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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"file\",\n+                            \"log\",\n+                            \"source\",\n+                            \"tail\",\n+                            \"text\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\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\": \"f2215c6\"\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 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+                        \"multiProcessorUseCases\": [],\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.kerberos.service.name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                            \"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+                            \"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\": \"sasl.mechanism\",\n+                                \"name\": \"cache-size\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\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\": \"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 or not to indent the output.\",\n+                                \"displayName\": \"Indent\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n-                                \"required\": false,\n+                                \"name\": \"indent-output\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"secure-processing\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"secure-processing\",\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+                            \"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\": \"ssl.context.service\",\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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"topic\": {\n-                                \"description\": \"The name of the Kafka Topic to publish to.\",\n-                                \"displayName\": \"Topic Name\",\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"transactional-id-prefix\",\n+                                \"name\": \"xslt-controller-key\",\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\": \"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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed 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\": \"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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"transform\",\n+                            \"xml\",\n+                            \"xslt\"\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.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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cipher-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75206,139 +81778,237 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"File Filter\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Filename Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n-                                        \"displayName\": \"GCM\",\n-                                        \"value\": \"GCM\"\n+                                        \"dependentValues\": [\n+                                            \"zip\",\n+                                            \"use mime.type attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\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+                                \"description\": \"If supplied this character set will be supplied to the Zip utility to attempt to decode filenames using the specific character set. If not specified the default platform character set will be used. This is useful if a Zip was created with a different character set than the platform default and the zip uses non standard values to specify.\",\n+                                \"displayName\": \"Filename Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cipher-algorithm-mode\",\n-                                \"required\": true,\n+                                \"name\": \"Filename Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"cipher-algorithm-padding\": {\n+                            \"Packaging Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"NoPadding\",\n-                                        \"displayName\": \"NoPadding\",\n-                                        \"value\": \"NoPadding\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS5Padding\",\n-                                        \"displayName\": \"PKCS5Padding\",\n-                                        \"value\": \"PKCS5Padding\"\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+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-tar-v1\",\n+                                        \"value\": \"flowfile-tar-v1\"\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\": \"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\": \"cipher-algorithm-padding\",\n+                                \"name\": \"Packaging Format\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification\",\n-                                \"required\": true,\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"key-specification-format\": {\n+                            \"allow-stored-entries-wdd\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"PASSWORD\",\n-                                \"description\": \"Format describing the configured Key Specification\",\n-                                \"displayName\": \"Key Specification Format\",\n+                                \"defaultValue\": \"false\",\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\": \"key-specification-format\",\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.MergeContent\"\n+                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Decryption failed\",\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\": \"Unpacked FlowFiles are sent 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AES\",\n-                            \"Argon2\",\n-                            \"PBKDF2\",\n-                            \"bcrypt\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\",\n-                            \"scrypt\"\n+                            \"Unpack\",\n+                            \"archive\",\n+                            \"flowfile-stream\",\n+                            \"flowfile-stream-v3\",\n+                            \"tar\",\n+                            \"un-merge\",\n+                            \"zip\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"Set \\\"Packaging Format\\\" value to \\\"zip\\\" or \\\"use mime.type attribute\\\".\\nSet \\\"Filename Character Set\\\" value to \\\"Cp437\\\" or \\\"IBM437\\\".\\n\",\n+                                \"description\": \"Unpack Zip containing filenames with special characters, created on Windows with filename charset 'Cp437' or 'IBM437'.\",\n+                                \"keywords\": [],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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+                                \"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                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75351,129 +82021,73 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                            },\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+                            \"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\": \"Private Key Identity Resources\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"counter-name\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\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+                            \"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\": \"Private Key Source\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"delta\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\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\": \"Decryption Completed\",\n+                                \"description\": \"Counter was updated/retrieved\",\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+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n+                            \"counter\",\n+                            \"debug\",\n+                            \"instrumentation\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75486,212 +82100,356 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"encryption-scheme\": {\n+                            \"db-type\": {\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+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\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+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\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+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\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+                                        \"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\": \"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+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\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+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\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+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\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+                                        \"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-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+                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-catalog-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"updatedatabasetable-create-table\": {\n+                                \"allowableValues\": [\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+                                        \"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\": \"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+                                        \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-primary-keys\": {\n+                                \"dependencies\": [\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+                                        \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-query-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"updatedatabasetable-quoted-column-identifiers\": {\n+                                \"allowableValues\": [\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"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                                     {\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\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"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 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+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Update Field Names\",\n+                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\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+                                \"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\": \"encryption-scheme\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-schema-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"key-derivation-strategy\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"updatedatabasetable-translate-field-names\": {\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\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"key-derivation-strategy\",\n+                                \"name\": \"updatedatabasetable-translate-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"password\": {\n-                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n-                                \"displayName\": \"Password\",\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\": \"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\": \"password\",\n+                                \"name\": \"updatedatabasetable-update-field-names\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption succeeded\",\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\": \"Decryption failed\",\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Jasypt\",\n-                            \"OpenSSL\",\n-                            \"PBES1\",\n-                            \"PKCS5\",\n-                            \"cryptography\",\n-                            \"decipher\",\n-                            \"decrypt\"\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.cipher.DecryptContentCompatibility\",\n-                        \"typeDescription\": \"Decrypt content using password-based encryption schemes with legacy algorithms supporting historical compatibility modes.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Password-Based Encryption Scheme\",\n-                                \"name\": \"pbe.scheme\"\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\": \"Password-Based Encryption Block Cipher\",\n-                                \"name\": \"pbe.symmetric.cipher\"\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\": \"Password-Based Encryption Digest Algorithm\",\n-                                \"name\": \"pbe.digest.algorithm\"\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\": \"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-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75699,157 +82457,204 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Binary encoding\",\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-                                \"displayName\": \"File Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"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\": \"Public Key Recipient Resources\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Public Key Recipients\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PROPERTIES\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Public Key Source\",\n-                                        \"propertyName\": \"Public Key Source\"\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+                            \"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\": \"Public Key Recipients\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Public Key Source\": {\n+                            \"Replacement Value Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\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\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\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\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n-                                \"displayName\": \"Public Key Source\",\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\": \"Public Key Source\",\n+                                \"name\": \"Replacement Value Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Completed\",\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Encryption Failed\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property uses the CONCAT Record Path function to concatenate multiple values together, potentially using other string literal values.\\nFor example, to combine the `title`, `firstName` and `lastName` fields into a single field named `fullName`, we add a property with the name `/fullName` and a value of `CONCAT(/title, ' ', /firstName, ' ', /lastName)`\\n\",\n+                                \"description\": \"Combine multiple fields into a single field.\",\n+                                \"keywords\": [\n+                                    \"combine\",\n+                                    \"concatenate\",\n+                                    \"recordpath\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\n    The value of the property is the explicit value to set the field to. For example, we can set any field with a name of `txId`, regardless of its level in the data's hierarchy,     to `1111-1111` by adding a property with a name of `//txId` and a value of `1111-1111`\\n\",\n+                                \"description\": \"Change the value of a record field to an explicit value.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"    \\\"Replacement Value Strategy\\\" = \\\"Record Path Value\\\"\\n\\n    A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\n    The value of the property is a RecordPath identifying the field to copy the value from.\\n    For example, we can copy the value of `/identifiers/all/imei` to the `identifier` field at the root level, by adding a property named     `/identifier` with a value of `/identifiers/all/imei`.\\n\",\n+                                \"description\": \"Copy the value of one record field to another record field.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"copy\",\n+                                    \"recordpath\",\n+                                    \"hierarchy\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.\\nThe value of the property is an Expression Language expression that references the attribute of interest. We can, for example, insert a new field name `filename` into each record by adding a property named `/filename` with a value of `${filename}`\\n\",\n+                                \"description\": \"Enrich data by injecting the value of an attribute into each Record.\",\n+                                \"keywords\": [\n+                                    \"enrich\",\n+                                    \"attribute\",\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"insert\",\n+                                    \"transform\"\n+                                ],\n+                                \"notes\": \"\"\n+                            },\n+                            {\n+                                \"configuration\": \"\\\"Replacement Value Strategy\\\" = \\\"Literal Value\\\"\\n\\nA single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.\\nThe value is an Expression Language expression that references the `field.value` variable. For example, to change the date/time format of a field named `txDate` from `year-month-day` format to `month/day/year` format, we add a property named `/txDate` with a value of `${field.value:toDate('yyyy-MM-dd'):format('MM/dd/yyyy')}`. We could also change the timezone of a timestamp field (and insert the timezone for clarity) by using a value of `${field.value:toDate('yyyy-MM-dd HH:mm:ss', 'UTC-0400'):format('yyyy-MM-dd HH:mm:ss Z', 'UTC')}`.\\n\",\n+                                \"description\": \"Change the format of a record field's value.\",\n+                                \"keywords\": [\n+                                    \"change\",\n+                                    \"update\",\n+                                    \"replace\",\n+                                    \"insert\",\n+                                    \"transform\",\n+                                    \"format\",\n+                                    \"date/time\",\n+                                    \"timezone\",\n+                                    \"expression language\"\n+                                ],\n+                                \"notes\": \"Use the RenameRecordField Processor in order to change a field's name.\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M3\",\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\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75862,383 +82667,401 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"mac-algorithm\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-delimiter\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"HmacSHA256\",\n-                                        \"value\": \"HmacSHA256\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA512\",\n-                                        \"value\": \"HmacSHA512\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Hashed Message Authentication Code Function\",\n-                                \"displayName\": \"Message Authentication Code Algorithm\",\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\": \"mac-algorithm\",\n+                                \"name\": \"validate-csv-header\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-authentication-code\",\n+                                \"name\": \"validate-csv-quote\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"message-authentication-code-encoding\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"validate-csv-schema\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"validate-csv-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\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\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\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\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Message Authentication Code\",\n-                                \"displayName\": \"Message Authentication Code Encoding\",\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\": \"message-authentication-code-encoding\",\n+                                \"name\": \"validate-csv-strategy\",\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+                            \"validate-csv-violations\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTF8\",\n-                                        \"value\": \"UTF8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Secret Key\",\n-                                \"displayName\": \"Secret Key Encoding\",\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\": \"secret-key-encoding\",\n+                                \"name\": \"validate-csv-violations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\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\": \"Signature Verification Failed\",\n-                                \"name\": \"failure\"\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                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"HMAC\",\n-                            \"MAC\",\n-                            \"Signing\"\n+                            \"csv\",\n+                            \"schema\",\n+                            \"validation\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n-                                \"name\": \"mac.calculated\"\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 Encoding of the Hashed Message Authentication Code\",\n-                                \"name\": \"mac.encoding\"\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\": \"Hashed Message Authentication Code Algorithm\",\n-                                \"name\": \"mac.algorithm\"\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"20 sec\",\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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-                                \"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\": \"2.0.0-M3\"\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+                            \"JSON Schema\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\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\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"JSON Schema\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\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\": \"Environment variables and FlowFile Attributes\",\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+                            \"JSON Schema Registry\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"SCHEMA_NAME_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Method for incremental export.\",\n-                                \"displayName\": \"Export Method\",\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-query-start-timestamp\",\n+                                \"name\": \"JSON Schema Registry\",\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.schemaregistry.services.JsonSchemaRegistry\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"zendesk-resource\": {\n+                            \"JSON Schema Version\": {\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-                                    },\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-                                    },\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\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\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\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\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\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\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\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\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+                                        \"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-                                        \"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+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The particular Zendesk resource which is meant to be exported.\",\n-                                \"displayName\": \"Resource\",\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-resource\",\n+                                \"name\": \"JSON Schema Version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n+                                \"name\": \"Schema Name\",\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+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n+                                \"name\": \"failure\"\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 are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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-                            \"zendesk\"\n+                            \"JSON\",\n+                            \"schema\",\n+                            \"validation\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.zendesk.GetZendesk\",\n-                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records fetched by the processor.\",\n-                                \"name\": \"record.count\"\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-zendesk-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76246,303 +83069,273 @@\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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+                            \"allow-extra-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\": \"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\": \"web-client-service-provider\",\n+                                \"name\": \"allow-extra-fields\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"coerce-types\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\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\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"coerce-types\",\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+                            \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\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\": 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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"zendesk-comment-body\": {\n-                                \"dependencies\": [\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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\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-                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n-                                \"displayName\": \"Comment Body\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-comment-body\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-priority\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the priority in the incoming record.\",\n-                                \"displayName\": \"Priority\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-priority\",\n+                                \"name\": \"schema-name\",\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+                            \"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\": \"zendesk-record-reader\",\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\": \"2.0.0-M3\"\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\": \"Environment variables 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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n+                                \"name\": \"schema-text\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-type\": {\n-                                \"dependencies\": [\n+                            \"strict-type-checking\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the type in the incoming record.\",\n-                                \"displayName\": \"Type\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"strict-type-checking\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n-                                \"required\": true,\n+                                \"name\": \"validation-details-attribute-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\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\": \"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\": \"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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"zendesk, ticket\"\n+                            \"record\",\n+                            \"schema\",\n+                            \"validate\"\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The error message of from the response.\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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-                            },\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-                            \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-windows-event-log-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-windows-event-log-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76550,133 +83343,102 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"name\": \"Schema File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"query\",\n-                                \"required\": true,\n+                                \"name\": \"XML Source Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Relationship for successfully consumed events.\",\n-                                \"name\": \"success\"\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+                            {\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\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-                            \"event\",\n-                            \"ingest\",\n-                            \"windows\"\n+                            \"schema\",\n+                            \"validation\",\n+                            \"xml\",\n+                            \"xsd\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Will set a MIME type value of application/xml.\",\n-                                \"name\": \"mime.type\"\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76689,464 +83451,1281 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"attribute-copy-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leaves the file as-is.\",\n-                                        \"displayName\": \"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-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"MOVE\"\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\": \"Deletes the file from the remote system.\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"DELETE\"\n+                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\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-                                \"displayName\": \"Completion Strategy\",\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\": \"Completion Strategy\",\n+                                \"name\": \"attribute-copy-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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-                                \"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+                            \"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\": \"Create Destination Directory\",\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\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"expiration-duration\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Destination Directory\",\n+                                \"name\": \"releasable-flowfile-count\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"remote-file\",\n+                                \"name\": \"release-signal-id\",\n                                 \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-name\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"target-signal-count\",\n+                                \"required\": true,\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n+                                \"name\": \"wait-buffer-count\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"wait-mode\": {\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+                                    },\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+                                    }\n+                                ],\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\": \"wait-mode\",\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.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\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 will be routed here for each successfully fetched file.\",\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 will be routed here when failed to fetch its content.\",\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                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cifs\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"samba\",\n-                            \"smb\"\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.smb.FetchSmb\",\n-                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error code returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.code\"\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 error message returned by SMB when the fetch of a file fails.\",\n-                                \"name\": \"error.message\"\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+                ],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"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-                            \"Ignore Hidden Files\": {\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\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\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\": \"Ignore Hidden Files\",\n+                                \"name\": \"Show Deltas\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\n+                            \"reporting-granularity\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"Keep Source File\",\n-                                \"required\": true,\n+                                \"name\": \"reporting-granularity\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"Password\",\n+                                \"name\": \"Directory Display Name\",\n                                 \"required\": false,\n-                                \"sensitive\": 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+                            \"Directory Location\": {\n+                                \"description\": \"The directory path of the partition to be monitored.\",\n+                                \"displayName\": \"Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n-                                \"required\": false,\n+                                \"name\": \"Directory Location\",\n+                                \"required\": true,\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"Threshold\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Recurse Subdirectories\": {\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"G1 Eden Space\",\n+                                        \"value\": \"G1 Eden Space\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"G1 Old Gen\",\n+                                        \"value\": \"G1 Old Gen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"G1 Survivor Space\",\n+                                        \"value\": \"G1 Survivor Space\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\n+                                \"defaultValue\": \"G1 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\": \"Recurse Subdirectories\",\n+                                \"name\": \"Memory Pool\",\n                                 \"required\": true,\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+                            \"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\": \"Share\",\n-                                \"required\": true,\n+                                \"name\": \"Reporting Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\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-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\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+                            \"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\": \"Share Access Strategy\",\n+                                \"name\": \"Usage Threshold\",\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+                            }\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"Username\",\n-                                \"required\": false,\n+                                \"name\": \"Hostname\",\n+                                \"required\": true,\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-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"8649\",\n+                                \"description\": \"The Port on which Ganglia is listening for incoming connections\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Send JVM Metrics\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"smb-dialect\",\n+                                \"name\": \"Send JVM Metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"timeout\": {\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\": \"2.0.0-M3\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Character Encoding\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"hl7-input-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"parse-segment-fields\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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 HL7 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+                            \"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\": \"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\": \"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+                            {\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"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+                        \"multiProcessorUseCases\": [],\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\": \"Environment variables 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+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leaves the file as-is.\",\n+                                        \"displayName\": \"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+                                        \"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\": \"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\": \"Completion Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Destination Directory\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"remote-file\",\n+                                \"required\": true,\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\": \"2.0.0-M3\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\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\": \"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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cifs\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"samba\",\n+                            \"smb\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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+                            \"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\": \"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\": \"Ignore Hidden 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\": \"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\": \"Keep Source File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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+                                \"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\": \"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\": \"Recurse Subdirectories\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Share Access Strategy\": {\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+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read, write, delete\",\n+                                        \"value\": \"read, write, delete\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Share Access Strategy\",\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+                                \"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+                                \"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+                            \"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+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"timeout\",\n@@ -77875,272 +85454,560 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"artifact\": \"nifi-azure-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n-                        \"explicitRestrictions\": [\n+                        \"dynamicProperties\": [\n                             {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n+                                \"description\": \"Adds the specified property name/value as a Request Header in the Elasticsearch requests.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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-                            \"Kerberos Keytab\": {\n-                                \"description\": \"Kerberos keytab associated with the principal.\",\n-                                \"displayName\": \"Kerberos Keytab\",\n+                            \"api-key\": {\n+                                \"dependencies\": [\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Keytab\",\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+                                    {\n+                                        \"dependentValues\": [\n+                                            \"API_KEY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"Unique identifier of the API key.\",\n+                                \"displayName\": \"API Key ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"api-key-id\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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\": \"authorization-scheme\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-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.KerberosUserService\",\n-                                \"version\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n-                                \"version\": \"2.0.0-M3\"\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.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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\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\": \"Kerberos Password\",\n+                                \"name\": \"el-cs-connect-timeout\",\n                                 \"required\": true,\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+                            \"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+                                \"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\": \"el-cs-enable-compression\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"el-cs-http-hosts\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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+                            },\n+                            \"el-cs-node-selector\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n+                                        \"displayName\": \"Any\",\n+                                        \"value\": \"ANY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n+                                        \"displayName\": \"Skip Dedicated Masters\",\n+                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-node-selector\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\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\": \"el-cs-path-prefix\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-send-meta-header\",\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+                            \"el-cs-sniff-cluster-nodes\": {\n+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniff-cluster-nodes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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+                                \"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\": \"el-cs-sniff-failure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-cs-sniffer-failure-delay\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff on Failure\",\n+                                        \"propertyName\": \"el-cs-sniff-failure\"\n+                                    }\n+                                ],\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-failure-delay\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-cs-sniffer-interval\": {\n+                                \"defaultValue\": \"5 mins\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\n+                                    }\n+                                ],\n+                                \"description\": \"Interval between Cluster sniffer operations\",\n+                                \"displayName\": \"Sniffer Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"el-cs-sniffer-request-timeout\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-socket-timeout\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"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\": \"el-cs-strict-deprecation\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-cs-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/empty, will be written out as a null/empty 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/empty, will not be written out\",\n+                                        \"displayName\": \"Always Suppress\",\n+                                        \"value\": \"always-suppress\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-suppress-nulls\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"el-cs-username\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"BASIC\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Scheme\",\n+                                        \"propertyName\": \"authorization-scheme\"\n+                                    }\n+                                ],\n+                                \"description\": \"The username to use with XPack security.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Ticket Cache File\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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\": \"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\": \"2.0.0-M3\"\n+                                }\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\": \"2.0.0-M3\"\n-                            },\n-                            {\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.kerberos.SelfContainedKerberosUserService\",\n+                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                 \"version\": \"2.0.0-M3\"\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+                            \"client\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\"\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.elasticsearch.ElasticSearchClientServiceImpl\",\n+                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client, using the Elasticsearch (low-level) REST Client.\",\n                         \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-protobuf-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-protobuf-services-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\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                         \"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+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Type\",\n+                                \"name\": \"el-lookup-index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Proto Directory\": {\n-                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n-                                \"displayName\": \"Proto 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proto Directory\",\n-                                \"required\": true,\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\": \"2.0.0-M3\"\n+                                }\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 schema reference information will be provided through a configured Schema Reference Reader service implementation.\",\n-                                        \"displayName\": \"Schema Reference Reader\",\n-                                        \"value\": \"schema-reference-reader\"\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\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"generate-from-proto-file\",\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\": \"schema-access-strategy\",\n                                 \"required\": true,\n@@ -78181,39 +86048,14 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Service implementation responsible for reading FlowFile attributes or content to determine the Schema Reference Identifier\",\n-                                \"displayName\": \"Schema Reference Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-reference-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.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n                             \"schema-registry\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n                                             \"schema-reference-reader\",\n                                             \"schema-name\"\n                                         ],\n@@ -78276,3215 +86118,2378 @@\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.lookup.LookupService\",\n                                 \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"protobuf\",\n-                            \"reader\",\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"lookup\",\n                             \"record\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n-                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"el-lookup-index\": {\n+                                \"description\": \"The name of the index to read from\",\n+                                \"displayName\": \"Index\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                            },\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\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\": \"2.0.0-M3\"\n                     }\n                 ],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-prometheus-nar\",\n+            \"artifact\": \"nifi-dropbox-processors-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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-                                    {\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+                            \"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\": \"prometheus-reporting-task-client-auth\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file\",\n                                 \"required\": true,\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-                                \"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\": \"prometheus-reporting-task-ssl-context\",\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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n+                        ],\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\": \"2.0.0-M3\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"prometheus\",\n-                            \"record\",\n-                            \"send\",\n-                            \"write\"\n+                            \"dropbox\",\n+                            \"fetch\",\n+                            \"storage\"\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-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": [\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-prometheus-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"60 sec\"\n+                            \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"et-initial-listing-target\": {\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\": \"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\": \"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+                                        \"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-                                        \"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+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\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\": \"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\": \"prometheus-reporting-task-client-auth\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\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+                            \"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+                                \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\n-                                \"required\": true,\n+                                \"name\": \"et-time-window\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-metrics-endpoint-port\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-send-jvm\": {\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+                                \"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. 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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"false\",\n-                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n-                                \"displayName\": \"Send JVM metrics\",\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\": \"prometheus-reporting-task-metrics-send-jvm\",\n+                                \"name\": \"recursive-search\",\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+                            {\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"dropbox\",\n+                            \"storage\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\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-                            \"prometheus-reporting-task-metrics-strategy\": {\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\": \"Send rollup metrics for the entire root process group\",\n-                                        \"displayName\": \"Root Process Group\",\n-                                        \"value\": \"Root Process Group\"\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n-                                        \"description\": \"Send metrics for each process group\",\n-                                        \"displayName\": \"All Process Groups\",\n-                                        \"value\": \"All Process Groups\"\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\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+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\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+                                \"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\": \"prometheus-reporting-task-metrics-strategy\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\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-                                \"displayName\": \"SSL Context 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\": \"prometheus-reporting-task-ssl-context\",\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables 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.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"prometheus\",\n-                            \"reporting\",\n-                            \"time series data\"\n+                            \"dropbox\",\n+                            \"put\",\n+                            \"storage\"\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-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                ],\n+                \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n-            \"artifact\": \"nifi-aws-nar\",\n+            \"artifact\": \"nifi-github-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-processors-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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-                            \"aws-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"aws-credentials-provider-service\",\n+                                \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\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+                            \"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\": \"cache-expiration\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cf\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"cache-size\",\n-                                \"required\": true,\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.security.principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"communications-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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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 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\": \"ENVIRONMENT\",\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"communications-timeout\",\n+                                \"name\": \"Acknowledgement Mode\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"proxy-configuration-service\",\n+                                \"name\": \"Connection Factory Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"region\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Destination Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\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\": \"Destination Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Durable subscription\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\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://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createDurableConsumer-jakarta.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Durable Subscription\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"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 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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Shared subscription\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\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://jakarta.ee/specifications/platform/9/apidocs/jakarta/jms/session#createSharedConsumer-jakarta.jms.Topic-java.lang.String-\",\n+                                \"displayName\": \"Shared Subscription\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Timeout\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.provider.url\",\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+                                \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"output-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"Write only the message to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\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\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\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\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The region of the cloud resources\",\n-                                \"displayName\": \"Region\",\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\": \"region\",\n+                                \"name\": \"output-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry-name\": {\n-                                \"description\": \"The name of the Schema Registry\",\n-                                \"displayName\": \"Schema Registry Name\",\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\": \"schema-registry-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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\": \"2.0.0-M3\"\n+                                }\n                             },\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+                            \"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                                 \"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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M3\"\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-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"aws\",\n-                            \"glue\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"consume\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"message\",\n+                            \"receive\"\n                         ],\n-                        \"type\": \"org.apache.nifi.aws.schemaregistry.AmazonGlueSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the AWS Glue Schema Registry so that those Schemas that are stored in the Glue Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Glue Schema Registry with their names.\",\n-                        \"version\": \"2.0.0-M3\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                            },\n+                            {\n+                                \"description\": \"Each message property is written to an attribute.\",\n+                                \"name\": \"other attributes\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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 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\": \"ENVIRONMENT\",\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\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\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_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Access Key\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Access Key ID\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Access Key\",\n+                                \"name\": \"Connection Client ID\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Assume Role ARN\": {\n-                                \"description\": \"The AWS Role ARN for cross account access. This is used in conjunction with Assume Role Session Name and other Assume Role properties.\",\n-                                \"displayName\": \"Assume Role ARN\",\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\": \"Assume Role ARN\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Destination Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Assume Role Session Name\": {\n-                                \"dependencies\": [\n+                            \"Destination Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"QUEUE\",\n+                                        \"value\": \"QUEUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TOPIC\",\n+                                        \"value\": \"TOPIC\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS Role Session Name for cross account access. This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role Session Name\",\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\": \"Assume Role Session Name\",\n+                                \"name\": \"Destination Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Credentials File\": {\n-                                \"description\": \"Path to a file containing AWS access key and secret key in properties file format.\",\n-                                \"displayName\": \"Credentials File\",\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\": \"Credentials File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Secret Key\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Secret Access Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Secret Key\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n                                 \"sensitive\": true\n                             },\n-                            \"Session Time\": {\n-                                \"defaultValue\": \"3600\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n-                                    }\n-                                ],\n-                                \"description\": \"Session time for role based session (between 900 and 3600 seconds). This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role Session Time\",\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\": \"Session 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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"User Name\": {\n+                                \"description\": \"User Name used for authentication and authorization.\",\n+                                \"displayName\": \"User Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"User Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"anonymous-credentials\": {\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\": \"If true, uses Anonymous credentials\",\n-                                \"displayName\": \"Use Anonymous Credentials\",\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\": \"anonymous-credentials\",\n-                                \"required\": false,\n+                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-external-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n-                                    }\n-                                ],\n-                                \"description\": \"External ID for cross-account access. This is used in conjunction with Assume Role ARN.\",\n-                                \"displayName\": \"Assume Role External ID\",\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\": \"assume-role-external-id\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"broker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-proxy-host\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n-                                    }\n-                                ],\n-                                \"description\": \"Proxy host for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n-                                \"displayName\": \"Assume Role Proxy Host\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"cflib\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.provider.url\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-proxy-host\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"java.naming.security.principal\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-proxy-port\": {\n-                                \"dependencies\": [\n+                            \"message-body-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bytes\",\n+                                        \"value\": \"bytes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     }\n                                 ],\n-                                \"description\": \"Proxy port for cross-account access, if needed within your environment. This will configure a proxy to request for temporary access keys into another AWS account.\",\n-                                \"displayName\": \"Assume Role Proxy Port\",\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\": \"assume-role-proxy-port\",\n+                                \"name\": \"message-body-type\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"naming.factory.libraries\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-ssl-context-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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"SSL Context Service used when connecting to the STS Endpoint.\",\n-                                \"displayName\": \"Assume Role SSL Context Service\",\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\": \"assume-role-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\": \"2.0.0-M3\"\n                                 }\n+                            }\n+                        },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"This attribute becomes the JMSDeliveryMode message header. Must be an integer.\",\n+                                \"name\": \"jms_deliveryMode\"\n                             },\n-                            \"assume-role-sts-endpoint\": {\n+                            {\n+                                \"description\": \"This attribute becomes the JMSExpiration message header. Must be a long.\",\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+                                \"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\": true,\n+                        \"supportsDynamicRelationships\": 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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-snmp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"snmp-authentication-passphrase\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\",\n+                                            \"authNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"The default AWS Security Token Service (STS) endpoint (\\\"sts.amazonaws.com\\\") works for all accounts that are not for China (Beijing) region or GovCloud. You only need to set this property to \\\"sts.cn-north-1.amazonaws.com.cn\\\" when you are requesting session credentials for services in China(Beijing) region or to \\\"sts.us-gov-west-1.amazonaws.com\\\" for GovCloud.\",\n-                                \"displayName\": \"Assume Role STS Endpoint Override\",\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\": \"assume-role-sts-endpoint\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"assume-role-sts-region\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-hostname\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\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\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\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\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\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\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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-                                \"defaultValue\": \"us-west-2\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS Security Token Service (STS) region\",\n-                                \"displayName\": \"Assume Role STS Region\",\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\": \"assume-role-sts-region\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-private-protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-sts-signer-override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWS4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n+                            \"snmp-private-protocol-passphrase\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS STS library uses Signature Version 4 by default. This property allows you to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Assume Role STS Signer Override\",\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\": \"assume-role-sts-signer-override\",\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-                            \"custom-signer-class-name\": {\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-                                            \"CustomSignerType\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n+                            \"snmp-security-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"default-credentials\": {\n+                            \"snmp-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"If true, uses the Default Credential chain, including EC2 instance profiles or roles, environment variables, default user credentials, etc.\",\n-                                \"displayName\": \"Use Default Credentials\",\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\": \"default-credentials\",\n+                                \"name\": \"snmp-strategy\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-textual-oid\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"profile-name\": {\n-                                \"description\": \"The AWS profile name for credentials from the profile configuration file.\",\n-                                \"displayName\": \"Profile Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"profile-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                \"version\": \"2.0.0-M3\"\n                             },\n-                            {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.credentials.provider.AwsCredentialsProviderService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"aws\",\n-                            \"credentials\",\n-                            \"provider\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService\",\n-                        \"typeDescription\": \"Defines credentials for Amazon Web Services processors. Uses default credentials without configuration. Default credentials support EC2 instance profile/role, default user profile, environment variables, etc. Additional options include access key / secret key pairs, credentials file, named profile, and assume role credentials.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"encryption-strategy\": {\n+                            \"snmp-version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No encryption.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use server-side, S3-managed encryption.\",\n-                                        \"displayName\": \"Server-side S3\",\n-                                        \"value\": \"SSE_S3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use server-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Server-side KMS\",\n-                                        \"value\": \"SSE_KMS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use server-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Server-side Customer Key\",\n-                                        \"value\": \"SSE_C\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use client-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Client-side KMS\",\n-                                        \"value\": \"CSE_KMS\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"Use client-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Client-side Customer Key\",\n-                                        \"value\": \"CSE_C\"\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n-                                \"displayName\": \"Encryption Strategy\",\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\": \"encryption-strategy\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n-                            \"key-id-or-key-material\": {\n-                                \"description\": \"For None and Server-side S3: not used. For Server-side KMS and Client-side KMS: the KMS Key ID must be configured. For Server-side Customer Key and Client-side Customer Key: the Key Material must be specified in Base64 encoded form. In case of Server-side Customer Key, the key must be an AES-256 key. In case of Client-side Customer Key, it can be an AES-256, AES-192 or AES-128 key.\",\n-                                \"displayName\": \"Key ID or Key Material\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"key-id-or-key-material\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kms-region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The Region of the AWS Key Management Service. Only used in case of Client-side KMS.\",\n-                                \"displayName\": \"KMS Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kms-region\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-aws-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"aws\",\n-                            \"decrypt\",\n-                            \"decryption\",\n-                            \"encrypt\",\n-                            \"encryption\",\n-                            \"key\",\n-                            \"s3\",\n-                            \"service\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.encryption.StandardS3EncryptionService\",\n-                        \"typeDescription\": \"Adds configurable encryption to S3 Put and S3 Fetch operations.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\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.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"S3\",\n-                            \"file\",\n-                            \"resource\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.service.S3FileResourceService\",\n-                        \"typeDescription\": \"Provides an Amazon Web Services (AWS) S3 file resource for other components.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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 dimension name/value pairs to be added to the metric. AWS supports a maximum of 10 dimensions.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Dimension Name\",\n-                                \"value\": \"Dimension Value\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"MetricName\": {\n-                                \"description\": \"The name of the metric\",\n-                                \"displayName\": \"Metric Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"MetricName\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Namespace\": {\n-                                \"description\": \"The namespace for the metric data for CloudWatch\",\n-                                \"displayName\": \"Namespace\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Namespace\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Timestamp\": {\n-                                \"description\": \"A point in time expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC. If not specified, the default value is set to the time the metric data was received\",\n-                                \"displayName\": \"Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unit\": {\n-                                \"description\": \"The unit of the metric. (e.g Seconds, Bytes, Megabytes, Percent, Count,  Kilobytes/Second, Terabits/Second, Count/Second) For details see http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html\",\n-                                \"displayName\": \"Unit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Unit\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Value\": {\n-                                \"description\": \"The value for the metric. Must be a double\",\n-                                \"displayName\": \"Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"maximum\": {\n-                                \"description\": \"The maximum value of the sample set. Must be a double\",\n-                                \"displayName\": \"Maximum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"maximum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"minimum\": {\n-                                \"description\": \"The minimum value of the sample set. Must be a double\",\n-                                \"displayName\": \"Minimum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"minimum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"sampleCount\": {\n-                                \"description\": \"The number of samples used for the statistic set. Must be a double\",\n-                                \"displayName\": \"Sample Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sampleCount\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"sum\": {\n-                                \"description\": \"The sum of values for the sample set. Must be a double\",\n-                                \"displayName\": \"Sum\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sum\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"cloudwatch\",\n-                            \"metrics\",\n-                            \"publish\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.cloudwatch.PutCloudWatchMetric\",\n-                        \"typeDescription\": \"Publishes metrics to Amazon CloudWatch. Metric can be either a single value, or a StatisticSet comprised of minimum, maximum, sum and sample count.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"DynamoDB\",\n-                            \"Remove\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                        \"typeDescription\": \"Deletes a document from DynamoDB based on hash and range key. The key can be string or number. The request requires all the primary keys for the operation (hash or hash and range key)\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Json Document attribute\": {\n-                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n-                                \"displayName\": \"Json Document attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Json Document attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to not found relationship if key not found in the table\",\n-                                \"name\": \"not found\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Fetch\",\n-                            \"Get\"\n+                            \"get\",\n+                            \"oid\",\n+                            \"snmp\",\n+                            \"walk\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                        \"typeDescription\": \"Retrieves a document from DynamoDB based on hash and range key.  The key can be string or number.For any get request all the primary keys are required (hash or hash and range based on the table keys).A Json Document ('Map') attribute of the DynamoDB item is read into the content of the FlowFile.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\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\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\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-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81493,5424 +88498,283 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Batch items for each request (between 1 and 50)\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"The items to be retrieved in one batch\",\n-                                \"displayName\": \"Batch items for each request (between 1 and 50)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Batch items for each request (between 1 and 50)\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character set of document\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character set of data in the document\",\n-                                \"displayName\": \"Character set of document\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Character set of document\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Name\": {\n-                                \"description\": \"The hash key name of the item\",\n-                                \"displayName\": \"Hash Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hash Key Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.hash.key.value}\",\n-                                \"description\": \"The hash key value of the item\",\n-                                \"displayName\": \"Hash Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Hash Key Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Hash Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Json Document attribute\": {\n-                                \"description\": \"The Json document to be retrieved from the dynamodb item ('s' type in the schema)\",\n-                                \"displayName\": \"Json Document attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Json Document attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Name\": {\n-                                \"description\": \"The range key name of the item\",\n-                                \"displayName\": \"Range Key Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Range Key Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value\": {\n-                                \"defaultValue\": \"${dynamodb.item.range.key.value}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Range Key Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Range Key Value\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Range Key Value Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Range Key Value Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Items hash key value\",\n-                                \"name\": \"  dynamodb.item.hash.key.value\"\n-                            },\n-                            {\n-                                \"description\": \"Items range key value\",\n-                                \"name\": \"  dynamodb.item.range.key.value\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Insert\",\n-                            \"Put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                        \"typeDescription\": \"Puts a document from DynamoDB based on hash and range key.  The table can have either hash and range or hash key alone. Currently the keys supported are string and number and value can be json document. In case of hash and range keys both key are required for the operation. The FlowFile content must be JSON. FlowFile content is mapped to the specified Json Document attribute in the DynamoDB item.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"snmp-community\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"snmp-manager-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition-key-attribute\": {\n+                                \"defaultValue\": \"noAuthNoPriv\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ByAttribute\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Partition Key Strategy\",\n-                                        \"propertyName\": \"partition-key-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the FlowFile attribute that will be used as the value of the partition key when using \\\"Partition by attribute\\\" partition key strategy.\",\n-                                \"displayName\": \"Partition Key Attribute\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"partition-key-attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition-key-field\": {\n-                                \"description\": \"Defines the name of the partition key field in the DynamoDB table. Partition key is also known as hash key. Depending on the \\\"Partition Key Strategy\\\" the field value might come from the incoming Record or a generated one.\",\n-                                \"displayName\": \"Partition Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"partition-key-field\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition-key-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Uses the value of the Record field identified by the \\\"Partition Key Field\\\" property as partition key value.\",\n-                                        \"displayName\": \"Partition By Field\",\n-                                        \"value\": \"ByField\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses an incoming FlowFile attribute identified by \\\"Partition Key Attribute\\\" as the value of the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n-                                        \"displayName\": \"Partition By Attribute\",\n-                                        \"value\": \"ByAttribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses a generated UUID as value for the partition key. The incoming Records must not contain field with the same name defined by the \\\"Partition Key Field\\\".\",\n-                                        \"displayName\": \"Generated UUID\",\n-                                        \"value\": \"Generated\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ByField\",\n-                                \"description\": \"Defines the strategy the processor uses to assign partition key value to the inserted Items.\",\n-                                \"displayName\": \"Partition Key Strategy\",\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\": \"partition-key-strategy\",\n+                                \"name\": \"snmp-security-level\",\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\": \"2.0.0-M3\"\n-                                }\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"sort-key-field\": {\n+                            \"snmp-usm-security-names\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ByField\",\n-                                            \"BySequence\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Sort Key Strategy\",\n-                                        \"propertyName\": \"sort-key-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Defines the name of the sort key field in the DynamoDB table. Sort key is also known as range key.\",\n-                                \"displayName\": \"Sort Key Field\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sort-key-field\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sort-key-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Uses the value of the Record field identified by the \\\"Sort Key Field\\\" property as sort key value.\",\n-                                        \"displayName\": \"Sort By Field\",\n-                                        \"value\": \"ByField\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor will assign a number for every item based on the original record's position in the incoming FlowFile. This will be used as sort key value.\",\n-                                        \"displayName\": \"Generate Sequence\",\n-                                        \"value\": \"BySequence\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Defines the strategy the processor uses to assign sort key to the inserted Items.\",\n-                                \"displayName\": \"Sort Key Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sort-key-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n-                                \"name\": \"dynamodb.chunks.processed\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.dynamodb.DeleteDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to unprocessed relationship when DynamoDB is not able to process all the items in the request. Typical reasons are insufficient table throughput capacity and exceeding the maximum bytes per request. Unprocessed FlowFiles can be retried with a new request.\",\n-                                \"name\": \"unprocessed\"\n-                            },\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": 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-                                \"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-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Insert\",\n-                            \"Put\",\n-                            \"Record\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\",\n-                        \"typeDescription\": \"Inserts items into DynamoDB based on record-oriented data. The record fields are mapped into DynamoDB item fields, including partition and sort keys if set. Depending on the number of records the processor might execute the insert in multiple chunks in order to overcome DynamoDB's limitation on batch writing. This might result partially processed FlowFiles in which case the FlowFile will be transferred to the \\\"unprocessed\\\" relationship with the necessary attribute to retry later without duplicating the already executed inserts.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n-                                \"name\": \"dynamodb.chunks.processed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Amazon Kinesis Firehose Delivery Stream Name\": {\n-                                \"description\": \"The name of kinesis firehose delivery stream\",\n-                                \"displayName\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Amazon Kinesis Firehose Delivery Stream Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"250\",\n-                                \"description\": \"Batch size for messages (1-500).\",\n-                                \"displayName\": \"Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max message buffer size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Max message buffer\",\n-                                \"displayName\": \"Max message buffer size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max message buffer size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"firehose\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.firehose.PutKinesisFirehose\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis Firehose. In order to send data to firehose, the firehose delivery stream name has to be specified.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.record.id\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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\": \"Override default KCL Configuration ConfigsBuilder properties with required values. Supports setting of values directly on the ConfigsBuilder, such as 'namespace', as well as properties on nested builders. For example, to set configsBuilder.retrievalConfig().maxListShardsRetryAttempts(value), name the property as 'retrievalConfig.maxListShardsRetryAttempts'. Only supports setting of simple property values, e.g. String, int, long and boolean. Does not allow override of KCL Configuration settings handled by non-dynamic processor properties.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"Kinesis Client Library (KCL) Configuration property name\",\n-                                \"value\": \"Value to set in the KCL Configuration property\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-application-name\": {\n-                                \"description\": \"The Kinesis stream reader application name.\",\n-                                \"displayName\": \"Application Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-application-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-checkpoint-interval\": {\n-                                \"defaultValue\": \"3 secs\",\n-                                \"description\": \"Interval between Kinesis checkpoints\",\n-                                \"displayName\": \"Checkpoint Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-checkpoint-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-cloudwatch-flag\": {\n-                                \"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 report Kinesis usage metrics to CloudWatch.\",\n-                                \"displayName\": \"Report Metrics to CloudWatch\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-cloudwatch-flag\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-dynamodb-override\": {\n-                                \"description\": \"DynamoDB override to use non-AWS deployments\",\n-                                \"displayName\": \"DynamoDB Override\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"amazon-kinesis-stream-dynamodb-override\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-failover-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Kinesis Client Library failover timeout\",\n-                                \"displayName\": \"Failover Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-graceful-shutdown-timeout\": {\n-                                \"defaultValue\": \"20 secs\",\n-                                \"description\": \"Kinesis Client Library graceful shutdown timeout\",\n-                                \"displayName\": \"Graceful Shutdown Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-initial-position\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.\",\n-                                        \"displayName\": \"LATEST\",\n-                                        \"value\": \"LATEST\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.\",\n-                                        \"displayName\": \"TRIM_HORIZON\",\n-                                        \"value\": \"TRIM_HORIZON\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading from the position denoted by a specific time stamp, provided in the value Timestamp.\",\n-                                        \"displayName\": \"AT_TIMESTAMP\",\n-                                        \"value\": \"AT_TIMESTAMP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"LATEST\",\n-                                \"description\": \"Initial position to read Kinesis streams.\",\n-                                \"displayName\": \"Initial Stream Position\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-initial-position\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-position-timestamp\": {\n-                                \"dependencies\": [\n-                                    {\n                                         \"dependentValues\": [\n-                                            \"AT_TIMESTAMP\"\n+                                            \"noAuthNoPriv\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Initial Stream Position\",\n-                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\n-                                    }\n-                                ],\n-                                \"description\": \"Timestamp position in stream from which to start reading Kinesis Records. Required if Initial position to read Kinesis streams. is AT_TIMESTAMP. Uses the Timestamp Format to parse value into a Date.\",\n-                                \"displayName\": \"Stream Position Timestamp\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-position-timestamp\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-record-reader\": {\n-                                \"description\": \"The Record Reader to use for reading received messages. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"amazon-kinesis-stream-record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The Kinesis Stream name can be referred to by Expression Language '${kinesis.name}' to access a schema. If Record Reader/Writer are not specified, each Kinesis Record will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"amazon-kinesis-stream-retry-count\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Number of times to retry a Kinesis operation (process record, checkpoint, shutdown)\",\n-                                \"displayName\": \"Retry Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-retry-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-retry-wait\": {\n-                                \"defaultValue\": \"1 sec\",\n-                                \"description\": \"Interval between Kinesis operation retries (process record, checkpoint, shutdown)\",\n-                                \"displayName\": \"Retry Wait\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-retry-wait\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-timestamp-format\": {\n-                                \"defaultValue\": \"yyyy-MM-dd HH:mm:ss\",\n-                                \"description\": \"Format to use for parsing the Stream Position Timestamp into a Date and converting the Kinesis Record's Approximate Arrival Timestamp into a FlowFile attribute.\",\n-                                \"displayName\": \"Timestamp Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"amazon-kinesis-stream-timestamp-format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"kinesis-stream-name\": {\n-                                \"description\": \"The name of Kinesis Stream\",\n-                                \"displayName\": \"Amazon Kinesis Stream Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kinesis-stream-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"Kinesis Client Library is used to create a Worker thread for consumption of Kinesis Records. The Worker is initialised and started when this Processor has been triggered. It runs continually, spawning Kinesis Record Processors as required to fetch Kinesis Records. The Worker Thread (and any child Record Processor threads) are not controlled by the normal NiFi scheduler as part of the Concurrent Thread pool and are not released until this processor is stopped.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"Kinesis Client Library will continually poll for new Records, requesting up to a maximum number of Records/bytes per call. This can result in sustained network usage.\",\n-                                \"resource\": \"NETWORK\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"consume\",\n-                            \"kinesis\",\n-                            \"stream\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\",\n-                        \"typeDescription\": \"Reads data from the specified AWS Kinesis stream and outputs a FlowFile for every processed Record (raw)  or a FlowFile for a batch of processed records if a Record Reader and Record Writer are configured. At-least-once delivery of all Kinesis Records within the Stream while the processor is running. AWS Kinesis Client Library can take several seconds to initialise before starting to fetch data. Uses DynamoDB for check pointing and CloudWatch (optional) for metrics. Ensure that the credentials provided have access to DynamoDB and CloudWatch (optional) along with Kinesis.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Partition key of the (last) Kinesis Record read from the Shard\",\n-                                \"name\": \"aws.kinesis.partition.key\"\n-                            },\n-                            {\n-                                \"description\": \"Shard ID from which the Kinesis Record was read\",\n-                                \"name\": \"aws.kinesis.shard.id\"\n-                            },\n-                            {\n-                                \"description\": \"The unique identifier of the (last) Kinesis Record within its Shard\",\n-                                \"name\": \"aws.kinesis.sequence.number\"\n-                            },\n-                            {\n-                                \"description\": \"Approximate arrival timestamp of the (last) Kinesis Record read from the stream\",\n-                                \"name\": \"aws.kinesis.approximate.arrival.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer (if configured)\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Number of records written to the FlowFiles by the Record Writer (if configured)\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Record Reader or Record Writer (if configured)\",\n-                                \"name\": \"record.error.message\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"amazon-kinesis-stream-partition-key\": {\n-                                \"defaultValue\": \"${kinesis.partition.key}\",\n-                                \"description\": \"The partition key attribute.  If it is not set, a random value is used\",\n-                                \"displayName\": \"Amazon Kinesis Stream Partition Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"amazon-kinesis-stream-partition-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kinesis-stream-name\": {\n-                                \"description\": \"The name of Kinesis Stream\",\n-                                \"displayName\": \"Amazon Kinesis Stream Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"kinesis-stream-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max-message-buffer-size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Max message buffer size in Mega-bytes\",\n-                                \"displayName\": \"Max message buffer size (MB)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-message-buffer-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-batch-size\": {\n-                                \"defaultValue\": \"250\",\n-                                \"description\": \"Batch size for messages (1-500).\",\n-                                \"displayName\": \"Message Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-batch-size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Kinesis. In order to send data to Kinesis, the stream name has to be specified.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Error message on posting message to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"Error code for the message when posting to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"Sequence number for the message when posting to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.sequence.number\"\n-                            },\n-                            {\n-                                \"description\": \"Shard id of the message posted to AWS Kinesis\",\n-                                \"name\": \"aws.kinesis.shard.id\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Amazon Lambda Name\": {\n-                                \"description\": \"The Lambda Function Name\",\n-                                \"displayName\": \"Amazon Lambda Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Amazon Lambda Qualifier (version)\": {\n-                                \"defaultValue\": \"$LATEST\",\n-                                \"description\": \"The Lambda Function Version\",\n-                                \"displayName\": \"Amazon Lambda Qualifier (version)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Qualifier (version)\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"lambda\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.lambda.PutLambda\",\n-                        \"typeDescription\": \"Sends the contents to a specified Amazon Lambda Function. The AWS credentials used for authentication must have permissions execute the Lambda function (lambda:InvokeFunction).The FlowFile content must be JSON.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Function error message in result on posting message to AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.function.error\"\n-                            },\n-                            {\n-                                \"description\": \"Status code in the result for the message when posting to AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.status.code\"\n-                            },\n-                            {\n-                                \"description\": \"Payload in the result from AWS Lambda\",\n-                                \"name\": \"aws.lambda.result.payload\"\n-                            },\n-                            {\n-                                \"description\": \"Log in the result of the message posted to Lambda\",\n-                                \"name\": \"aws.lambda.result.log\"\n-                            },\n-                            {\n-                                \"description\": \"Exception message on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.message\"\n-                            },\n-                            {\n-                                \"description\": \"Exception cause on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.cause\"\n-                            },\n-                            {\n-                                \"description\": \"Exception error code on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.error.code\"\n-                            },\n-                            {\n-                                \"description\": \"Exception request id on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.request.id\"\n-                            },\n-                            {\n-                                \"description\": \"Exception status code on invoking from AWS Lambda\",\n-                                \"name\": \"aws.lambda.exception.status.code\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this 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-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The bucket name where polly output will be located.\",\n-                                \"name\": \"PollyS3OutputBucket\"\n-                            },\n-                            {\n-                                \"description\": \"Object key of polly output.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\",\n-                        \"typeDescription\": \"Trigger a AWS Polly job. It should be followed by GetAwsPollyJobStatus processor in order to monitor job status.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsPollyJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"textract-type\": {\n-                                \"defaultValue\": \"${awsTextractType}\",\n-                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n-                                \"displayName\": \"Textract Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"textract-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Textract\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Textract job.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"textract-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Expense Analysis\",\n-                                        \"value\": \"Expense Analysis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Document Analysis\",\n-                                        \"value\": \"Document Analysis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Document Text Detection\",\n-                                        \"value\": \"Document Text Detection\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Document Analysis\",\n-                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n-                                \"displayName\": \"Textract Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"textract-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Textract\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\",\n-                        \"typeDescription\": \"Trigger a AWS Textract job. It should be followed by GetAwsTextractJobStatus processor in order to monitor job status.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTextractJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            },\n-                            {\n-                                \"description\": \"The selected Textract type, which can be used in GetAwsTextractJobStatus\",\n-                                \"name\": \"awsTextractType\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"usm-security-names\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\",\n-                        \"typeDescription\": \"Trigger a AWS Transcribe job. It should be followed by GetAwsTranscribeStatus processor in order to monitor job status.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranscribeJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"snmp-usm-security-names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n+                            \"snmp-usm-users-file-path\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\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\": \"snmp-usm-users-file-path\",\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-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\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\": \"snmp-usm-users-json-content\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-usm-users-source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"The JSON containing the USM users\",\n+                                        \"displayName\": \"Json Content\",\n+                                        \"value\": \"usm-json-content\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\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\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\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-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"snmp-usm-users-source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Retrieving results failed for some reason, but the issue is likely to resolve on its own, such as Provisioned Throughput Exceeded or a Throttling failure. It is generally expected to retry this relationship.\",\n-                                \"name\": \"throttled\"\n-                            },\n-                            {\n-                                \"description\": \"The job is currently still being processed\",\n-                                \"name\": \"running\"\n-                            },\n-                            {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"All FlowFiles that are received from the SNMP agent are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship\",\n                                 \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n-                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"listen\",\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Translate job.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\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\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86919,349 +88783,484 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Region\": {\n+                            \"snmp-authentication-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"HMAC384SHA512\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\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\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\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\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-private-protocol\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\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\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\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\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\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\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\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\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\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-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\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\": \"snmp-private-protocol\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-private-protocol-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\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+                                \"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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\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\": \"snmp-security-level\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\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\": \"snmp-security-name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-agent-address\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\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\": \"Environment variables 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-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\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\": \"Environment variables 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\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\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\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\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\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\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\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\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\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\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\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\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\": \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-manager-host\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-oid-value\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-trap-specific-type\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n+                                        \"dependentValues\": [\n+                                            \"6\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Generic Trap Type\",\n+                                        \"propertyName\": \"snmp-trap-generic-type\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-trap-specific-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"snmp-version\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\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\": \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"json-payload\": {\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success 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\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"send\",\n+                            \"snmp\",\n+                            \"trap\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\",\n-                        \"typeDescription\": \"Trigger a AWS Translate job. It should be followed by GetAwsTranslateJobStatus processor in order to monitor job status.\",\n+                        \"type\": \"org.apache.nifi.snmp.processors.SendTrapSNMP\",\n+                        \"typeDescription\": \"Sends information to SNMP Manager.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The task ID that can be used to poll for Job completion in GetAwsTranslateJobStatus\",\n-                                \"name\": \"awsTaskId\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -87274,1920 +89273,2835 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"snmp-authentication-passphrase\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-authentication-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"snmp-community\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"FullControl User List\": {\n-                                \"defaultValue\": \"${s3.permissions.full.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n-                                \"displayName\": \"FullControl User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FullControl User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"snmp-hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"defaultValue\": \"${s3.owner}\",\n-                                \"description\": \"The Amazon ID to use for the object's owner\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n-                                \"displayName\": \"Read ACL User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read ACL User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.read.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n-                                \"displayName\": \"Read Permission User List\",\n+                            \"snmp-port\": {\n+                                \"defaultValue\": \"161\",\n+                                \"description\": \"Port of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read Permission User List\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"snmp-private-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\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\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\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\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\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-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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+                                \"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-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Signer Override\": {\n+                            \"snmp-security-level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to delete\",\n-                                \"displayName\": \"Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n-                                \"displayName\": \"Write ACL User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write ACL User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.write.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n-                                \"displayName\": \"Write Permission User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write Permission User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-class-name\": {\n+                                \"defaultValue\": \"noAuthNoPriv\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n+                            \"snmp-security-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"SNMPv3\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-security-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"proxy-configuration-service\",\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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Delete\",\n-                            \"S3\"\n+                            \"oid\",\n+                            \"set\",\n+                            \"snmp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                        \"typeDescription\": \"Deletes a file from an Amazon S3 Bucket. If attempting to delete a file that does not exist, FlowFile is routed to success.\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\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 S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n                             },\n                             {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n                             },\n                             {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n                         },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"keyring-file\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"configurations\": [\n+                                \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credential-configuration-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchS3Object.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\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-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\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\": \"Retrieve all files in an S3 bucket\",\n-                                \"keywords\": [\n-                                    \"s3\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\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+                            \"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-                                \"configurations\": [\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_BUCKET}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{S3_SOURCE_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to RouteOnAttribute.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.ListS3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n-                                        \"configuration\": \"If you would like to \\\"OR\\\" together all of the conditions (i.e., the file should be retrieved if any of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if any matches\\\".\\nIf you would like to \\\"AND\\\" together all of the conditions (i.e., the file should only be retrieved if all of the conditions are met), set \\\"Routing Strategy\\\" to \\\"Route to 'matched' if all match\\\".\\n\\nFor each condition that you would like to filter on, add a new property. The name of the property should describe the condition. The value of the property should be an Expression Language expression that returns `true` if the file meets the condition or `false` if the file does not meet the condition.\\n\\nSome attributes that you may consider filtering on are:\\n- `filename` (the name of the file)\\n- `s3.length` (the number of bytes in the file)\\n- `s3.tag.<tag name>` (the value of the s3 tag with the name `tag name`)\\n- `s3.user.metadata.<key name>` (the value of the user metadata with the key named `key name`)\\n\\nFor example, to fetch only files that are at least 1 MB and have a filename ending in `.zip` we would set the following properties:\\n- \\\"Routing Strategy\\\" = \\\"Route to 'matched' if all match\\\"\\n- \\\"At least 1 MB\\\" = \\\"${s3.length:ge(1000000)}\\\"\\n- \\\"Ends in .zip\\\" = \\\"${filename:endsWith('.zip')}\\\"\\n\\nAuto-terminate the `unmatched` Relationship.\\nConnect the `matched` Relationship to the FetchS3Object processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.RouteOnAttribute\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the ListS3 Processor.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve only files from S3 that meet some specified criteria\",\n-                                \"keywords\": [\n-                                    \"s3\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"filter\",\n-                                    \"select\",\n-                                    \"fetch\",\n-                                    \"criteria\"\n-                                ],\n-                                \"notes\": \"\"\n-                            },\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Queue URL\\\" must be set to the appropriate URL for the SQS queue. It is recommended that this property be parameterized, using a value such as `#{SQS_QUEUE_URL}`.\\nThe \\\"Region\\\" property must be set to denote the SQS region that the queue resides in. It's a good idea to parameterize this property by setting it to something like `#{SQS_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' relationship is connected to EvaluateJsonPath.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.sqs.GetSQS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Destination\\\" = \\\"flowfile-attribute\\\"\\n\\\"s3.bucket\\\" = \\\"$.Records[0].s3.bucket.name\\\"\\n\\\"filename\\\" = \\\"$.Records[0].s3.object.key\\\"\\n\\nThe 'success' relationship is connected to FetchS3Object.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.EvaluateJsonPath\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${s3.bucket}\\\"\\n\\\"Object Key\\\" = \\\"${filename}\\\"\\n\\nThe \\\"Region\\\" property must be set to the same value as the \\\"Region\\\" property of the GetSQS Processor.\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve new files as they arrive in an S3 bucket\",\n-                                \"keywords\": [],\n-                                \"notes\": \"This method of retrieving files from S3 is more efficient than using ListS3 and more cost effective. It is the pattern recommended by AWS. However, it does require that the S3 bucket be configured to place notifications on an SQS queue when new files arrive. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html\"\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\": \"azure-cosmos-db-consistency-level\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"primaryNodeOnly\": false,\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Application Client ID\": {\n+                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n+                                \"displayName\": \"Application Client ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Application Client ID\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Application Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n+                                \"displayName\": \"Application Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Application Tenant ID\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n+                                \"displayName\": \"Application Tenant ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Application Tenant ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Azure Managed Identity\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MANAGED_IDENTITY\",\n+                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n+                                \"displayName\": \"Authentication Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Authentication Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n+                            \"Cluster URI\": {\n+                                \"description\": \"Azure Data Explorer Cluster URI\",\n+                                \"displayName\": \"Cluster URI\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cluster URI\",\n+                                \"required\": true,\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.data.explorer.KustoIngestService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\",\n+                            \"azure\",\n+                            \"ingest\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoIngestService\",\n+                        \"typeDescription\": \"Sends batches of flowfile content or stream flowfile content to an Azure ADX cluster.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application Client ID\": {\n+                                \"description\": \"Azure Data Explorer Application Client Identifier for Authentication\",\n+                                \"displayName\": \"Application Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Client ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n+                            \"Application Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Key for Authentication\",\n+                                \"displayName\": \"Application Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Application Tenant ID\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"APPLICATION_CREDENTIALS\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"Authentication Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Azure Data Explorer Application Tenant Identifier for Authentication\",\n+                                \"displayName\": \"Application Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application Tenant ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n+                                        \"description\": \"Azure Managed Identity\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"MANAGED_IDENTITY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"MANAGED_IDENTITY\",\n+                                \"description\": \"Authentication method for access to Azure Data Explorer\",\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+                            \"Cluster URI\": {\n+                                \"description\": \"Azure Data Explorer Cluster URI\",\n+                                \"displayName\": \"Cluster URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Cluster URI\",\n+                                \"required\": true,\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.data.explorer.KustoQueryService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.data.explorer.StandardKustoQueryService\",\n+                        \"typeDescription\": \"Standard implementation of Kusto Query Service for Azure Data Explorer\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n+                                        \"description\": \"Azure Event Hub shared access key\",\n+                                        \"displayName\": \"Shared Access Key\",\n+                                        \"value\": \"SHARED_ACCESS_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\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+                            \"Event Hub Name\": {\n+                                \"description\": \"Provides the Event Hub Name for connections\",\n+                                \"displayName\": \"Event Hub Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Partition Key\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n+                                        \"description\": \"Default Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n+                                        \"description\": \"China Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n+                                        \"description\": \"Germany Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n+                                        \"description\": \"United States Government Endpoint\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\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\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\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\": \"Shared Access Policy\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\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\": \"Shared Access Policy Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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+                            },\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\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\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\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\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\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\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"credentials-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"SSL Context Service\",\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\": \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\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.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"service-principal-client-secret\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"dependentValues\": [\n+                                            \"SERVICE_PRINCIPAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                                \"description\": \"Password of the Client/Application.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to download\",\n-                                \"displayName\": \"Version\",\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.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"storage-account-key\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"ACCOUNT_KEY\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\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, Managed Identity or Service Principal 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\": \"Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": true,\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\": \"Environment variables 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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"name\": \"storage-endpoint-suffix\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n+                            \"storage-sas-token\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"SAS_TOKEN\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                                \"description\": \"Shared Access Signature token (the leading '?' may be included) 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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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.ADLSCredentialsService\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n+                                \"required\": true,\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\": \"encryption-service\",\n-                                \"required\": false,\n+                                \"name\": \"storage-credentials-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M3\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"file\",\n+                            \"microsoft\",\n+                            \"resource\",\n+                            \"storage\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureBlobStorageFileResourceService\",\n+                        \"typeDescription\": \"Provides an Azure Blob Storage file resource for other components.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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\": \"proxy-configuration-service\",\n-                                \"required\": false,\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"directory-name\": {\n+                                \"defaultValue\": \"${azure.directory}\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-length\",\n-                                \"required\": false,\n+                                \"name\": \"directory-name\",\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+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"range-start\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"requester-pays\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Does not consent to pay requester charges for retrieving objects from the S3 bucket.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.\",\n-                                \"displayName\": \"Requester Pays\",\n+                            \"filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"requester-pays\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, 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.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Fetch\",\n-                            \"Get\",\n-                            \"S3\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"file\",\n+                            \"microsoft\",\n+                            \"resource\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                        \"typeDescription\": \"Retrieves the contents of an S3 Object and writes it to the content of a FlowFile\",\n-                        \"useCases\": [\n+                        \"type\": \"org.apache.nifi.services.azure.storage.AzureDataLakeStorageFileResourceService\",\n+                        \"typeDescription\": \"Provides an Azure Data Lake Storage (ADLS) file resource for other components.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"dynamicProperties\": [\n                             {\n-                                \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the S3 bucket that contains the file. Typically this is defined as an attribute on an incoming FlowFile, so this property is set to `${s3.bucket}`.\\nThe \\\"Object Key\\\" property denotes the fully qualified filename of the file to fetch. Typically, the FlowFile's `filename` attribute is used, so this property is set to `${filename}`.\\nThe \\\"Region\\\" property must be set to denote the S3 region that the Bucket resides in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{S3_REGION}`.\\n\\nThe \\\"AWS Credentials Provider service\\\" property should specify an instance of the AWSCredentialsProviderControllerService in order to provide credentials for accessing the file.\\n\",\n-                                \"description\": \"Fetch a specific file from S3\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\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-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The URL that can be used to access the S3 object\",\n-                                \"name\": \"s3.url\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the S3 bucket\",\n-                                \"name\": \"s3.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"absolute.path\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The MD5 sum of the file\",\n-                                \"name\": \"hash.value\"\n-                            },\n-                            {\n-                                \"description\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"If S3 provides the content type/MIME type, this attribute will hold that file\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\n-                            },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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-                            {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\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-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\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\": \"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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\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.\",\n+                                \"displayName\": \"Service Principal Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\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.\",\n+                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-client-secret\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"If the file has an expiration date, this attribute will be set, containing the milliseconds since epoch in UTC time\",\n-                                \"name\": \"s3.expirationTime\"\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.\",\n+                                \"displayName\": \"Service Principal Tenant ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"service-principal-tenant-id\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The ID of the rule that dictates this object's expiration time\",\n-                                \"name\": \"s3.expirationTimeRuleId\"\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, Managed Identity or Service Principal instead for fine-grained control with policies.\",\n+                                \"displayName\": \"Account Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The server side encryption algorithm of the object\",\n-                                \"name\": \"s3.sseAlgorithm\"\n+                            \"storage-account-name\": {\n+                                \"description\": \"The storage account name.\",\n+                                \"displayName\": \"Storage Account Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-account-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The version of the S3 object\",\n-                                \"name\": \"s3.version\"\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\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\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 (the leading '?' may be included)\",\n+                                \"displayName\": \"SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The name of the encryption strategy that was used to store the S3 object (if it is encrypted)\",\n-                                \"name\": \"s3.encryptionStrategy\"\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\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_v12\",\n+                        \"typeDescription\": \"Provides credentials for Azure Storage processors using Azure Storage client library v12.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n+                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n+                                \"required\": false,\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+                                \"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-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Bucket\": {\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"azure-cosmos-db-container-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-key\",\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-                            \"Listing Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"If not using a Record Writer, this property dictates how many S3 objects should be listed in a single batch. Once this number is reached, the FlowFiles that have been created will be transferred out of the Processor. Setting this value lower may result in lower latency by sending out the FlowFiles before the complete listing has finished. However, it can significantly reduce performance. Larger values may take more memory to store all of the information before sending the FlowFiles out. This property is ignored if using a Record Writer, as one of the main benefits of the Record Writer is being able to emit the entire listing as a single FlowFile.\",\n-                                \"displayName\": \"Listing 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\": \"Listing Batch Size\",\n+                                \"name\": \"azure-cosmos-db-partition-key\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            \"Region\": {\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\": \"2.0.0-M3\"\n+                                }\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+                            {\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+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                            \"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.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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Data Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n+                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec\",\n+                                        \"displayName\": \"avro\",\n+                                        \"value\": \"avro\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n+                                        \"description\": \"An Avro format with support for logical types and for the snappy compression codec.\",\n+                                        \"displayName\": \"apacheavro\",\n+                                        \"value\": \"apacheavro\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n+                                        \"description\": \"A text file with comma-separated values (,). For more information, see RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files.\",\n+                                        \"displayName\": \"csv\",\n+                                        \"value\": \"csv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n+                                        \"description\": \"A text file containing JSON objects separated by \\\\n or \\\\r\\\\n. For more information, see JSON Lines (JSONL).\",\n+                                        \"displayName\": \"json\",\n+                                        \"value\": \"json\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n+                                        \"description\": \"A text file containing a JSON array of property containers (each representing a record) or any number of property containers separated by spaces, \\\\n or \\\\r\\\\n. Each property container may be spread across multiple lines. This format is preferable to JSON unless the data is not property containers.\",\n+                                        \"displayName\": \"multijson\",\n+                                        \"value\": \"multijson\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"An ORC file.\",\n+                                        \"displayName\": \"orc\",\n+                                        \"value\": \"orc\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n+                                        \"description\": \"A parquet file.\",\n+                                        \"displayName\": \"parquet\",\n+                                        \"value\": \"parquet\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n+                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n+                                        \"displayName\": \"psv\",\n+                                        \"value\": \"psv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n+                                        \"description\": \"A text file with values separated by semicolons (;).\",\n+                                        \"displayName\": \"scsv\",\n+                                        \"value\": \"scsv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n+                                        \"description\": \"A text file with SOH-separated values. (SOH is the ASCII code point 1. This format is used by Hive in HDInsight).\",\n+                                        \"displayName\": \"sohsv\",\n+                                        \"value\": \"sohsv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n+                                        \"description\": \"A text file with tab delimited values (\\\\t).\",\n+                                        \"displayName\": \"tsv\",\n+                                        \"value\": \"tsv\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"A text file with tab-delimited values (\\\\t). A backslash (\\\\) is used as escape character.\",\n+                                        \"displayName\": \"tsve\",\n+                                        \"value\": \"tsve\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n+                                        \"description\": \"A text file with lines separated by \\\\n. Empty lines are skipped\",\n+                                        \"displayName\": \"txt\",\n+                                        \"value\": \"txt\"\n+                                    }\n+                                ],\n+                                \"description\": \"The format of the data that is sent to Azure Data Explorer. Supported formats include: avro, csv, json\",\n+                                \"displayName\": \"Data Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Data Format\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Name\": {\n+                                \"description\": \"Azure Data Explorer Database Name for ingesting data\",\n+                                \"displayName\": \"Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Mapping Name\": {\n+                                \"description\": \"The name of the mapping responsible for storing the data in the appropriate columns.\",\n+                                \"displayName\": \"Ingest Mapping Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Ingest Mapping Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Status Polling Interval\": {\n+                                \"defaultValue\": \"5 s\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n+                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the value of interval of time to poll for ingestion status\",\n+                                \"displayName\": \"Ingest Status Polling Interval\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ingest Status Polling Interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingest Status Polling Timeout\": {\n+                                \"defaultValue\": \"5 m\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n+                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                    }\n+                                ],\n+                                \"description\": \"Defines the total amount time to poll for ingestion status\",\n+                                \"displayName\": \"Ingest Status Polling Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Ingest Status Polling Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Ingestion Ignore First Record\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Defines whether ignore first record while ingestion.\",\n+                                \"displayName\": \"Ingestion Ignore First Record\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Ingestion Ignore First Record\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Kusto Ingest Service\": {\n+                                \"description\": \"Azure Data Explorer Kusto Ingest Service\",\n+                                \"displayName\": \"Kusto Ingest Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"Kusto Ingest 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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.data.explorer.KustoIngestService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Signer Override\": {\n+                            \"Partially Succeeded Routing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n+                                        \"displayName\": \"success\",\n+                                        \"value\": \"success\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n+                                        \"displayName\": \"failure\",\n+                                        \"value\": \"failure\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"failure\",\n+                                \"description\": \"Defines where to route FlowFiles that resulted in a partially succeeded status.\",\n+                                \"displayName\": \"Partially Succeeded Routing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partially Succeeded Routing Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Poll for Ingest Status\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Determines whether to poll on ingestion status after an ingestion to Azure Data Explorer is completed\",\n+                                \"displayName\": \"Poll for Ingest Status\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Signer Override\",\n-                                \"required\": false,\n+                                \"name\": \"Poll for Ingest Status\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n+                            \"Streaming Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to stream data to Azure Data Explorer.\",\n+                                \"displayName\": \"Streaming Enabled\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Streaming Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n+                            \"Table Name\": {\n+                                \"description\": \"Azure Data Explorer Table Name for ingesting data\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Ingest processing succeeded\",\n+                                \"name\": \"success\"\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+                            {\n+                                \"description\": \"Ingest processing 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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.PutAzureDataExplorer\",\n+                        \"typeDescription\": \"Acts as an Azure Data Explorer sink which sends FlowFiles to the provided endpoint. Data can be sent through queued ingestion or streaming ingestion to the Azure Data Explorer cluster.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Database Name\": {\n+                                \"description\": \"Azure Data Explorer Database Name for querying\",\n+                                \"displayName\": \"Database Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Database Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Kusto Query Service\": {\n+                                \"description\": \"Azure Data Explorer Kusto Query Service\",\n+                                \"displayName\": \"Kusto Query Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"delimiter\",\n-                                \"required\": false,\n+                                \"name\": \"Kusto Query 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.data.explorer.KustoQueryService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"Query\": {\n+                                \"description\": \"Query to be run against Azure Data Explorer\",\n+                                \"displayName\": \"Query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles containing results of a successful Query\",\n+                                \"name\": \"success\"\n                             },\n-                            \"et-initial-listing-target\": {\n+                            {\n+                                \"description\": \"FlowFiles containing original input associated with a failed Query\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ADX\",\n+                            \"Azure\",\n+                            \"Data\",\n+                            \"Explorer\",\n+                            \"Kusto\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.data.explorer.QueryAzureDataExplorer\",\n+                        \"typeDescription\": \"Query Azure Data Explorer and stream JSON results to output FlowFiles\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Azure Data Explorer query error message on failures\",\n+                                \"name\": \"query.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"Azure Data Explorer query executed\",\n+                                \"name\": \"query.executed\"\n+                            },\n+                            {\n+                                \"description\": \"Content Type set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Service Bus Endpoint\": {\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\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\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\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\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-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\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\": \"et-initial-listing-target\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-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\": \"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\": \"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\": \"et-state-cache\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Entity Tracking State Cache\",\n-                                        \"propertyName\": \"et-state-cache\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Transport Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"list-type\": {\n+                            \"checkpoint-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"List Objects V1\",\n-                                        \"value\": \"1\"\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\": \"List Objects V2\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n+                                        \"displayName\": \"Component State\",\n+                                        \"value\": \"COMPONENT_STATE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Specifies whether to use the original List Objects or the newer List Objects Version 2 endpoint.\",\n-                                \"displayName\": \"List Type\",\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\": \"list-type\",\n+                                \"name\": \"checkpoint-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-consumer-group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-initial-offset\": {\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+                                        \"description\": \"Read from the oldest message retained in the stream.\",\n+                                        \"displayName\": \"Start of stream\",\n+                                        \"value\": \"start-of-stream\"\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+                                        \"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\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\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\": \"listing-strategy\",\n+                                \"name\": \"event-hub-initial-offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-age\": {\n-                                \"description\": \"The maximum age that an S3 object can be in order to be considered; any object older than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Maximum Object Age\",\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\": \"max-age\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age that an S3 object must be in order to be considered; any object younger than this amount of time (according to last modification date) will be ignored\",\n-                                \"displayName\": \"Minimum Object Age\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"event-hub-prefetch-count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prefix\": {\n-                                \"description\": \"The prefix used to filter the object list. Do not begin with a forward slash '/'. In most cases, it should end with a forward slash '/'.\",\n-                                \"displayName\": \"Prefix\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prefix\",\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-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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 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\": 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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"requester-pays\": {\n-                                \"allowableValues\": [\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Indicates that the requester consents to pay any charges associated with listing the S3 bucket.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-account-key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"storage-account-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Does not consent to pay requester charges for listing the S3 bucket.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, indicates that the requester consents to pay any charges associated with listing the S3 bucket.  This sets the 'x-amz-request-payer' header to 'requester'.  Note that this setting is not applicable when 'Use Versions' is 'true'.\",\n-                                \"displayName\": \"Requester Pays\",\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\": \"requester-pays\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-account-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-versions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"storage-container-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use S3 versions, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Versions\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-versions\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-container-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"write-s3-object-tags\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If set to 'True', the tags associated with the S3 object will be written as FlowFile attributes\",\n-                                \"displayName\": \"Write Object Tags\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"write-s3-object-tags\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"storage-sas-token\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"write-s3-user-metadata\": {\n+                            \"use-managed-identity\": {\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\": \"false\",\n-                                \"description\": \"If set to 'True', the user defined metadata associated with the S3 object will be added to FlowFile attributes/records\",\n-                                \"displayName\": \"Write User Metadata\",\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\": \"write-s3-user-metadata\",\n+                                \"name\": \"use-managed-identity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\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+                            \"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+                                \"CLUSTER\",\n+                                \"LOCAL\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"description\": \"FlowFiles received from Event Hub.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"S3\",\n-                            \"list\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                        \"typeDescription\": \"Retrieves a listing of objects from an S3 bucket. For each object that is listed, creates a FlowFile that represents the object so that it can be fetched in conjunction with FetchS3Object. 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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the S3 bucket\",\n-                                \"name\": \"s3.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"The region of the S3 bucket\",\n-                                \"name\": \"s3.region\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\n-                            },\n-                            {\n-                                \"description\": \"A boolean indicating if this is the latest version of the object\",\n-                                \"name\": \"s3.isLatest\"\n-                            },\n-                            {\n-                                \"description\": \"The last modified time in milliseconds since epoch in UTC time\",\n-                                \"name\": \"s3.lastModified\"\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 size of the object in bytes\",\n-                                \"name\": \"s3.length\"\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n                             },\n                             {\n-                                \"description\": \"The storage class of the object\",\n-                                \"name\": \"s3.storeClass\"\n+                                \"description\": \"The sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n                             },\n                             {\n-                                \"description\": \"The version of the object, if applicable\",\n-                                \"name\": \"s3.version\"\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n                             },\n                             {\n-                                \"description\": \"If 'Write Object Tags' is set to 'True', the tags associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n-                                \"name\": \"s3.tag.___\"\n+                                \"description\": \"The name of the partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n                             },\n                             {\n-                                \"description\": \"If 'Write User Metadata' is set to 'True', the user defined metadata associated to the S3 object that is being listed will be written as part of the flowfile attributes\",\n-                                \"name\": \"s3.user.metadata.___\"\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-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89195,930 +92109,749 @@\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 S3 object as key/value pairs\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a User-Defined Metadata field to add to the S3 Object\",\n-                                \"value\": \"The value of a User-Defined Metadata field to add to the S3 Object\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Event Hub Consumer Group\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Message Enqueue Time\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache Control\": {\n-                                \"description\": \"Sets the Cache-Control HTTP header indicating the caching directives of the associated object. Multiple directives are comma-separated.\",\n-                                \"displayName\": \"Cache Control\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Control\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Partition Receiver Timeout (millseconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Partition Recivier Fetch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Disposition\": {\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"inline\",\n-                                        \"value\": \"inline\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"attachment\",\n-                                        \"value\": \"attachment\"\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-                                \"description\": \"Sets the Content-Disposition HTTP header indicating if the content is intended to be displayed inline or should be downloaded.\\n Possible values are 'inline' or 'attachment'. If this property is not specified, object's content-disposition will be set to filename. When 'attachment' is selected, '; filename=' plus object key are automatically appended to form final value 'attachment; filename=\\\"filename.jpg\\\"'.\",\n-                                \"displayName\": \"Content Disposition\",\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\": \"Content Disposition\",\n-                                \"required\": false,\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Type\": {\n-                                \"description\": \"Sets the Content-Type HTTP header indicating the type of content stored in the associated object. The value of this header is a standard MIME type.\\nAWS S3 Java client will attempt to determine the correct content type if one hasn't been set yet. Users are responsible for ensuring a suitable content type is set when uploading streams. If no content type is provided and cannot be determined by the filename, the default content type \\\"application/octet-stream\\\" will be used.\",\n-                                \"displayName\": \"Content Type\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Expiration Time Rule\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Expiration Time Rule\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Expiration Time Rule\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Resource Service\": {\n+                            \"proxy-configuration-service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n+                                            \"AmqpWebSockets\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource 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\": \"File Resource 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.fileresource.service.api.FileResourceService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"FullControl User List\": {\n-                                \"defaultValue\": \"${s3.permissions.full.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Full Control for an object\",\n-                                \"displayName\": \"FullControl User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"FullControl User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Multipart Part Size\": {\n-                                \"defaultValue\": \"5 GB\",\n-                                \"description\": \"Specifies the part size for use when the PutS3Multipart Upload API is used. Flow files will be broken into chunks of this size for the upload process, but the last part sent can be smaller since it is not padded. The valid range is 50MB to 5GB.\",\n-                                \"displayName\": \"Multipart Part Size\",\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\": \"Multipart Part Size\",\n+                                \"name\": \"use-managed-identity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\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+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-                            \"Multipart Threshold\": {\n-                                \"defaultValue\": \"5 GB\",\n-                                \"description\": \"Specifies the file size threshold for switch from the PutS3Object API to the PutS3MultipartUpload API.  Flow files bigger than this limit will be sent using the stateful multipart process. The valid range is 50MB to 5GB.\",\n-                                \"displayName\": \"Multipart Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Multipart Threshold\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n                             },\n-                            \"Multipart Upload AgeOff Interval\": {\n-                                \"defaultValue\": \"60 min\",\n-                                \"description\": \"Specifies the interval at which existing multipart uploads in AWS S3 will be evaluated for ageoff.  When processor is triggered it will initiate the ageoff evaluation if this interval has been exceeded.\",\n-                                \"displayName\": \"Multipart Upload AgeOff Interval\",\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+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\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\": \"Multipart Upload AgeOff Interval\",\n+                                \"name\": \"Event Hub Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Multipart Upload Max Age Threshold\": {\n-                                \"defaultValue\": \"7 days\",\n-                                \"description\": \"Specifies the maximum age for existing multipart uploads in AWS S3.  When the ageoff process occurs, any upload older than this threshold will be aborted.\",\n-                                \"displayName\": \"Multipart Upload Max Age Threshold\",\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\": \"Multipart Upload Max Age Threshold\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Event Hub Namespace\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"defaultValue\": \"${s3.owner}\",\n-                                \"description\": \"The Amazon ID to use for the object's owner\",\n-                                \"displayName\": \"Owner\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.readacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to read the Access Control List for an object\",\n-                                \"displayName\": \"Read ACL User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read ACL User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Read Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.read.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Read Access for an object\",\n-                                \"displayName\": \"Read Permission User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read Permission User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"Service Bus Endpoint\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"Service Bus Endpoint\",\n                                 \"required\": true,\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-                                    {\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\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\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\": \"Resource Transfer Source\",\n-                                \"required\": true,\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Signer Override\": {\n+                            \"Transport Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n+                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n+                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n+                                        \"value\": \"AmqpWebSockets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\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\": \"Signer Override\",\n-                                \"required\": false,\n+                                \"name\": \"Transport Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Storage Class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DeepArchive\",\n-                                        \"value\": \"DeepArchive\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Glacier\",\n-                                        \"value\": \"Glacier\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GlacierInstantRetrieval\",\n-                                        \"value\": \"GlacierInstantRetrieval\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IntelligentTiering\",\n-                                        \"value\": \"IntelligentTiering\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"OneZoneInfrequentAccess\",\n-                                        \"value\": \"OneZoneInfrequentAccess\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Outposts\",\n-                                        \"value\": \"Outposts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ReducedRedundancy\",\n-                                        \"value\": \"ReducedRedundancy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Snow\",\n-                                        \"value\": \"Snow\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Standard\",\n-                                        \"value\": \"Standard\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"StandardInfrequentAccess\",\n-                                        \"value\": \"StandardInfrequentAccess\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Storage Class\",\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\": \"Storage Class\",\n+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Write ACL User List\": {\n-                                \"defaultValue\": \"${s3.permissions.writeacl.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have permissions to change the Access Control List for an object\",\n-                                \"displayName\": \"Write ACL User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write ACL User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Write Permission User List\": {\n-                                \"defaultValue\": \"${s3.permissions.write.users}\",\n-                                \"description\": \"A comma-separated list of Amazon User ID's or E-mail addresses that specifies who should have Write Access for an object\",\n-                                \"displayName\": \"Write Permission User List\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write Permission User List\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"canned-acl\": {\n-                                \"defaultValue\": \"${s3.permissions.cannedacl}\",\n-                                \"description\": \"Amazon Canned ACL for an object, one of: BucketOwnerFullControl, BucketOwnerRead, LogDeliveryWrite, AuthenticatedRead, PublicReadWrite, PublicRead, Private; will be ignored if any other ACL/permission/owner property is specified\",\n-                                \"displayName\": \"Canned ACL\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"canned-acl\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioning-key-attribute-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"custom-signer-module-location\": {\n+                            \"proxy-configuration-service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"AmqpWebSockets\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Transport Type\",\n+                                        \"propertyName\": \"Transport Type\"\n                                     }\n                                 ],\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.s3.AmazonS3EncryptionService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"s3-object-remove-tags-prefix\": {\n+                            \"use-managed-identity\": {\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\": \"false\",\n-                                \"description\": \"If set to 'True', the value provided for 'Object Tags Prefix' will be removed from the attribute(s) and then considered as the Tag name. For ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII and the prefix is set to 'tagS3' then the corresponding tag values would be 'country' and 'PII'\",\n-                                \"displayName\": \"Remove Tag Prefix\",\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\": \"s3-object-remove-tags-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"use-managed-identity\",\n+                                \"required\": true,\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-                            \"s3-object-tags-prefix\": {\n-                                \"description\": \"Specifies the prefix which would be scanned against the incoming FlowFile's attributes and the matching attribute's name and value would be considered as the outgoing S3 object's Tag name and Tag value respectively. For Ex: If the incoming FlowFile carries the attributes tagS3country, tagS3PII, the tag prefix to be specified would be 'tagS3'\",\n-                                \"displayName\": \"Object Tags Prefix\",\n+                            {\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\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Source Blob Name\": {\n+                                \"description\": \"The full name of the source blob\",\n+                                \"displayName\": \"Source Blob Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"s3-object-tags-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Source Blob Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s3-temporary-directory-multipart\": {\n-                                \"defaultValue\": \"${java.io.tmpdir}\",\n-                                \"description\": \"Directory in which, for multipart uploads, the processor will locally save the state tracking the upload ID and parts uploaded which must both be provided to complete the upload.\",\n-                                \"displayName\": \"Temporary Directory Multipart State\",\n+                            \"Source Container Name\": {\n+                                \"description\": \"Name of the Azure storage container that will be copied\",\n+                                \"displayName\": \"Source Container Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s3-temporary-directory-multipart\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Source Container Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"server-side-encryption\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n-                                \"displayName\": \"Server Side Encryption\",\n+                            \"Source Storage Credentials\": {\n+                                \"description\": \"Credentials Service used to obtain Azure Blob Storage Credentials to read Source Blob information\",\n+                                \"displayName\": \"Source Storage Credentials\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-side-encryption\",\n+                                \"name\": \"Source Storage Credentials\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the destination blob defaults to the Source Blob Name when not specified\",\n+                                \"displayName\": \"Destination Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-chunked-encoding\": {\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\": \"true\",\n-                                \"description\": \"Enables / disables chunked encoding for upload requests. Set it to false only if your endpoint does not support chunked uploading.\",\n-                                \"displayName\": \"Use Chunked Encoding\",\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\": \"use-chunked-encoding\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"container-name\": {\n+                                \"description\": \"Name of the Azure storage container destination defaults to the Source Container Name when not specified\",\n+                                \"displayName\": \"Destination Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"use-path-style-access\": {\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\": \"false\",\n-                                \"description\": \"Path-style access can be enforced by setting this property to true. Set it to true if your endpoint does not support virtual-hosted-style requests, only path-style requests.\",\n-                                \"displayName\": \"Use Path Style Access\",\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\": \"use-path-style-access\",\n-                                \"required\": false,\n+                                \"name\": \"create-container\",\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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"storage-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n+                                \"displayName\": \"Destination 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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the S3 object\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.DeleteS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\"\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.azure.storage.PutAzureBlobStorage_v12\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Put\",\n-                            \"S3\"\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.aws.s3.PutS3Object\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as an S3 Object to an Amazon S3 Bucket.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Copies a blob in Azure Blob Storage from one account/container to another. The processor uses Azure Blob Storage client library v12.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The URL that can be used to access the S3 object\",\n-                                \"name\": \"s3.url\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 bucket where the Object was put in S3\",\n-                                \"name\": \"s3.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 key within where the Object was put in S3\",\n-                                \"name\": \"s3.key\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 content type of the S3 Object that put in S3\",\n-                                \"name\": \"s3.contenttype\"\n-                            },\n-                            {\n-                                \"description\": \"The version of the S3 Object that was put to S3\",\n-                                \"name\": \"s3.version\"\n-                            },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"The ETag of the S3 Object\",\n-                                \"name\": \"s3.etag\"\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\n                             },\n                             {\n-                                \"description\": \"The content disposition of the S3 Object that put in S3\",\n-                                \"name\": \"s3.contentdisposition\"\n+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\n                             },\n                             {\n-                                \"description\": \"The cache-control header of the S3 Object\",\n-                                \"name\": \"s3.cachecontrol\"\n+                                \"description\": \"MIME Type of the content\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The uploadId used to upload the Object to S3\",\n-                                \"name\": \"s3.uploadId\"\n+                                \"description\": \"Language code for the content\",\n+                                \"name\": \"lang\"\n                             },\n                             {\n-                                \"description\": \"A human-readable form of the expiration date of the S3 object, if one is set\",\n-                                \"name\": \"s3.expiration\"\n+                                \"description\": \"Timestamp of the blob\",\n+                                \"name\": \"azure.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The server side encryption algorithm of the object\",\n-                                \"name\": \"s3.sseAlgorithm\"\n+                                \"description\": \"Length of the blob\",\n+                                \"name\": \"azure.length\"\n                             },\n                             {\n-                                \"description\": \"A human-readable form of the User Metadata of the S3 object, if any was set\",\n-                                \"name\": \"s3.usermetadata\"\n+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n                             },\n                             {\n-                                \"description\": \"The name of the encryption strategy, if any was set\",\n-                                \"name\": \"s3.encryptionStrategy\"\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\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90131,503 +92864,299 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"The amount of time to wait in order to establish a connection to AWS or receive data from AWS before timing out.\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Object Key\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The S3 Object Key to use. This is analogous to a filename for traditional file systems.\",\n-                                \"displayName\": \"Object Key\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"delete-snapshots-option\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"EU (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"EU (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"EU (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"EU (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"EU (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"EU (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"EU (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"EU (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"delete-snapshots-option\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Signer Override\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 2\",\n-                                        \"value\": \"S3SignerType\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Default Signature\",\n-                                \"description\": \"The AWS S3 library uses Signature Version 4 by default but this property allows you to specify the Version 2 signer to support older S3-compatible services or even to plug in your own custom signer implementation.\",\n-                                \"displayName\": \"Signer Override\",\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\": \"Signer Override\",\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\": \"2.0.0-M3\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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                             },\n-                            \"append-tag\": {\n-                                \"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 tag will be appended to the existing set of tags on the S3 object. Any existing tags with the same key as the new tag will be updated with the specified value. If set to false, the existing tags will be removed and the new tag will be set on the S3 object.\",\n-                                \"displayName\": \"Append Tag\",\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+                        \"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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\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\": \"append-tag\",\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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"file\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Filesystem Object Type\",\n+                                        \"propertyName\": \"filesystem-object-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully qualified class name of the custom signer class. The signer must implement com.amazonaws.auth.Signer interface.\",\n-                                \"displayName\": \"Custom Signer Class Name\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"filesystem-object-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\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-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain the custom signer's JAR file and its dependencies (if any).\",\n-                                \"displayName\": \"Custom Signer Module Location\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\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.\",\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\": \"2.0.0-M3\"\n                                 }\n-                            },\n-                            \"tag-key\": {\n-                                \"description\": \"The key of the tag that will be set on the S3 Object\",\n-                                \"displayName\": \"Tag Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"tag-key\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"tag-value\": {\n-                                \"description\": \"The value of the tag that will be set on the S3 Object\",\n-                                \"displayName\": \"Tag Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"tag-value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"version\": {\n-                                \"description\": \"The Version of the Object to tag\",\n-                                \"displayName\": \"Version ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"version\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.s3.FetchS3Object\",\n-                            \"org.apache.nifi.processors.aws.s3.ListS3\",\n-                            \"org.apache.nifi.processors.aws.s3.PutS3Object\"\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\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it 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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"S3\",\n-                            \"Tag\"\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.aws.s3.TagS3Object\",\n-                        \"typeDescription\": \"Adds or updates a tag on an Amazon S3 Object.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Deletes the provided file from Azure Data Lake Storage\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The tags associated with the S3 object will be written as part of the FlowFile attributes\",\n-                                \"name\": \"s3.tag.___\"\n-                            },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n-                            },\n-                            {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90635,429 +93164,260 @@\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+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n                             {\n-                                \"description\": \"User specified dynamic Properties are added as attributes to the notification\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"A name of an attribute to be added to the notification\",\n-                                \"value\": \"The attribute value\"\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Container Name\\\" property should be set to the name of the Blob Storage Container that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_CONTAINER}`.\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureBlobStorage_v12.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Container Name\\\" = \\\"${azure.container}\\\"\\n\\\"Blob Name\\\" = \\\"${azure.blobname}\\\"\\n\\nThe \\\"Storage Credentials\\\" property should specify an instance of the AzureStorageCredentialsService_v12 in order to provide credentials for accessing the storage container.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an Azure Blob Storage container\",\n+                                \"keywords\": [\n+                                    \"azure\",\n+                                    \"blob\",\n+                                    \"storage\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n                             }\n                         ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ARN Type\": {\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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client-Side Encryption Key Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The ARN is the name of a topic\",\n-                                        \"displayName\": \"Topic ARN\",\n-                                        \"value\": \"Topic ARN\"\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"The ARN is the name of a particular Target, used to notify a specific subscriber\",\n-                                        \"displayName\": \"Target ARN\",\n-                                        \"value\": \"Target ARN\"\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Topic ARN\",\n-                                \"description\": \"The type of Amazon Resource Name that is being used.\",\n-                                \"displayName\": \"ARN Type\",\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\": \"ARN Type\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Amazon Resource Name (ARN)\": {\n-                                \"description\": \"The name of the resource to which notifications should be published\",\n-                                \"displayName\": \"Amazon Resource Name (ARN)\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Amazon Resource Name (ARN)\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The character set in which the FlowFile's content is encoded\",\n-                                \"displayName\": \"Character Set\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Deduplication Message ID\": {\n-                                \"description\": \"The token used for deduplication of sent messages\",\n-                                \"displayName\": \"Deduplication Message ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Deduplication Message ID\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"E-mail Subject\": {\n-                                \"description\": \"The optional subject to use for any subscribers that are subscribed via E-mail\",\n-                                \"displayName\": \"E-mail Subject\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"E-mail Subject\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Group ID\": {\n-                                \"description\": \"If using FIFO, the message group to which the flowFile belongs\",\n-                                \"displayName\": \"Message Group ID\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Group ID\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"storage-credentials-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"SSL Context 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_v12\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n-                            },\n-                            \"Use JSON Structure\": {\n-                                \"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 FlowFile must be JSON with a top-level element named 'default'. Additional elements can be used to send different messages to different protocols. See the Amazon SNS Documentation for more information.\",\n-                                \"displayName\": \"Use JSON Structure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use JSON Structure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\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\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"publish\",\n-                            \"pubsub\",\n-                            \"put\",\n-                            \"sns\",\n-                            \"topic\"\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.aws.sns.PutSNS\",\n-                        \"typeDescription\": \"Sends the content of a FlowFile as a notification to the Amazon Simple Notification Service\",\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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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\": \"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                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -91067,2106 +93427,863 @@\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-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n+                                    {\n+                                        \"configuration\": \"The \\\"Filesystem Name\\\" property should be set to the name of the Azure Filesystem (also known as a Container) that files reside in.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_FILESYSTEM}`.\\nConfigure the \\\"Directory Name\\\" property to specify the name of the directory in the file system.     If the flow being built is to be reused elsewhere, it's a good idea to parameterize this property by setting it to something like `#{AZURE_DIRECTORY}`.\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchAzureDataLakeStorage.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\"\n+                                    },\n+                                    {\n+                                        \"configuration\": \"\\\"Filesystem Name\\\" = \\\"${azure.filesystem}\\\"\\n\\\"Directory Name\\\" = \\\"${azure.directory}\\\"\\n\\\"File Name\\\" = \\\"${azure.filename}\\\"\\n\\nThe \\\"ADLS Credentials\\\" property should specify an instance of the ADLSCredentialsService in order to provide credentials for accessing the filesystem.\\n\",\n+                                        \"processorClassName\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                                    }\n+                                ],\n+                                \"description\": \"Retrieve all files in an Azure DataLake Storage directory\",\n+                                \"keywords\": [\n+                                    \"azure\",\n+                                    \"datalake\",\n+                                    \"adls\",\n+                                    \"state\",\n+                                    \"retrieve\",\n+                                    \"fetch\",\n+                                    \"all\",\n+                                    \"stream\"\n+                                ],\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider 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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"adls-credentials-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n+                                    \"artifact\": \"nifi-azure-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\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-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue delete from\",\n-                                \"displayName\": \"Queue URL\",\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Receipt Handle\": {\n-                                \"defaultValue\": \"${sqs.receipt.handle}\",\n-                                \"description\": \"The identifier that specifies the receipt of the message\",\n-                                \"displayName\": \"Receipt Handle\",\n+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Receipt Handle\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"number-of-retries\",\n                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-start\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\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\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure 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                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"Queue\",\n-                            \"SQS\"\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.aws.sqs.DeleteSQS\",\n-                        \"typeDescription\": \"Deletes a message from an Amazon Simple Queuing Service Queue\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Fetch the specified file from Azure Data Lake Storage\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n+                        \"version\": \"2.0.0-M3\",\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+                            {\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-aws-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n-                            },\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\": \"Specifies whether the messages should be automatically deleted by the processors once they have been received.\",\n-                                \"displayName\": \"Auto Delete Messages\",\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\": \"Auto Delete Messages\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"The maximum number of messages to send in a single network request\",\n-                                \"displayName\": \"Batch Size\",\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\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Big5\",\n-                                        \"value\": \"Big5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Big5-HKSCS\",\n-                                        \"value\": \"Big5-HKSCS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CESU-8\",\n-                                        \"value\": \"CESU-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EUC-JP\",\n-                                        \"value\": \"EUC-JP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EUC-KR\",\n-                                        \"value\": \"EUC-KR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB18030\",\n-                                        \"value\": \"GB18030\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB2312\",\n-                                        \"value\": \"GB2312\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GBK\",\n-                                        \"value\": \"GBK\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM-Thai\",\n-                                        \"value\": \"IBM-Thai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM00858\",\n-                                        \"value\": \"IBM00858\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01140\",\n-                                        \"value\": \"IBM01140\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01141\",\n-                                        \"value\": \"IBM01141\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01142\",\n-                                        \"value\": \"IBM01142\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01143\",\n-                                        \"value\": \"IBM01143\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01144\",\n-                                        \"value\": \"IBM01144\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01145\",\n-                                        \"value\": \"IBM01145\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01146\",\n-                                        \"value\": \"IBM01146\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01147\",\n-                                        \"value\": \"IBM01147\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01148\",\n-                                        \"value\": \"IBM01148\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM01149\",\n-                                        \"value\": \"IBM01149\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM037\",\n-                                        \"value\": \"IBM037\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM1026\",\n-                                        \"value\": \"IBM1026\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM1047\",\n-                                        \"value\": \"IBM1047\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM273\",\n-                                        \"value\": \"IBM273\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM277\",\n-                                        \"value\": \"IBM277\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM278\",\n-                                        \"value\": \"IBM278\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM280\",\n-                                        \"value\": \"IBM280\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM284\",\n-                                        \"value\": \"IBM284\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM285\",\n-                                        \"value\": \"IBM285\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM290\",\n-                                        \"value\": \"IBM290\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM297\",\n-                                        \"value\": \"IBM297\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM420\",\n-                                        \"value\": \"IBM420\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM424\",\n-                                        \"value\": \"IBM424\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM437\",\n-                                        \"value\": \"IBM437\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM500\",\n-                                        \"value\": \"IBM500\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM775\",\n-                                        \"value\": \"IBM775\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM850\",\n-                                        \"value\": \"IBM850\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM852\",\n-                                        \"value\": \"IBM852\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM855\",\n-                                        \"value\": \"IBM855\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM857\",\n-                                        \"value\": \"IBM857\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM860\",\n-                                        \"value\": \"IBM860\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM861\",\n-                                        \"value\": \"IBM861\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM862\",\n-                                        \"value\": \"IBM862\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM863\",\n-                                        \"value\": \"IBM863\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM864\",\n-                                        \"value\": \"IBM864\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM865\",\n-                                        \"value\": \"IBM865\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM866\",\n-                                        \"value\": \"IBM866\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM868\",\n-                                        \"value\": \"IBM868\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM869\",\n-                                        \"value\": \"IBM869\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM870\",\n-                                        \"value\": \"IBM870\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM871\",\n-                                        \"value\": \"IBM871\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IBM918\",\n-                                        \"value\": \"IBM918\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-CN\",\n-                                        \"value\": \"ISO-2022-CN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-JP\",\n-                                        \"value\": \"ISO-2022-JP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-JP-2\",\n-                                        \"value\": \"ISO-2022-JP-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-2022-KR\",\n-                                        \"value\": \"ISO-2022-KR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-13\",\n-                                        \"value\": \"ISO-8859-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-15\",\n-                                        \"value\": \"ISO-8859-15\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-16\",\n-                                        \"value\": \"ISO-8859-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-2\",\n-                                        \"value\": \"ISO-8859-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-3\",\n-                                        \"value\": \"ISO-8859-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-4\",\n-                                        \"value\": \"ISO-8859-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-5\",\n-                                        \"value\": \"ISO-8859-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-6\",\n-                                        \"value\": \"ISO-8859-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-7\",\n-                                        \"value\": \"ISO-8859-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-8\",\n-                                        \"value\": \"ISO-8859-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-9\",\n-                                        \"value\": \"ISO-8859-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JIS_X0201\",\n-                                        \"value\": \"JIS_X0201\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JIS_X0212-1990\",\n-                                        \"value\": \"JIS_X0212-1990\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KOI8-R\",\n-                                        \"value\": \"KOI8-R\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"KOI8-U\",\n-                                        \"value\": \"KOI8-U\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Shift_JIS\",\n-                                        \"value\": \"Shift_JIS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TIS-620\",\n-                                        \"value\": \"TIS-620\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32\",\n-                                        \"value\": \"UTF-32\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32BE\",\n-                                        \"value\": \"UTF-32BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-32LE\",\n-                                        \"value\": \"UTF-32LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1250\",\n-                                        \"value\": \"windows-1250\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1251\",\n-                                        \"value\": \"windows-1251\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1252\",\n-                                        \"value\": \"windows-1252\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1253\",\n-                                        \"value\": \"windows-1253\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1254\",\n-                                        \"value\": \"windows-1254\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1255\",\n-                                        \"value\": \"windows-1255\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1256\",\n-                                        \"value\": \"windows-1256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1257\",\n-                                        \"value\": \"windows-1257\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-1258\",\n-                                        \"value\": \"windows-1258\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"windows-31j\",\n-                                        \"value\": \"windows-31j\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Big5-HKSCS-2001\",\n-                                        \"value\": \"x-Big5-HKSCS-2001\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Big5-Solaris\",\n-                                        \"value\": \"x-Big5-Solaris\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-euc-jp-linux\",\n-                                        \"value\": \"x-euc-jp-linux\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-EUC-TW\",\n-                                        \"value\": \"x-EUC-TW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-eucJP-Open\",\n-                                        \"value\": \"x-eucJP-Open\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1006\",\n-                                        \"value\": \"x-IBM1006\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1025\",\n-                                        \"value\": \"x-IBM1025\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1046\",\n-                                        \"value\": \"x-IBM1046\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1097\",\n-                                        \"value\": \"x-IBM1097\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1098\",\n-                                        \"value\": \"x-IBM1098\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1112\",\n-                                        \"value\": \"x-IBM1112\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1122\",\n-                                        \"value\": \"x-IBM1122\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1123\",\n-                                        \"value\": \"x-IBM1123\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1124\",\n-                                        \"value\": \"x-IBM1124\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1129\",\n-                                        \"value\": \"x-IBM1129\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1166\",\n-                                        \"value\": \"x-IBM1166\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1364\",\n-                                        \"value\": \"x-IBM1364\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1381\",\n-                                        \"value\": \"x-IBM1381\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM1383\",\n-                                        \"value\": \"x-IBM1383\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM29626C\",\n-                                        \"value\": \"x-IBM29626C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM300\",\n-                                        \"value\": \"x-IBM300\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM33722\",\n-                                        \"value\": \"x-IBM33722\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM737\",\n-                                        \"value\": \"x-IBM737\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM833\",\n-                                        \"value\": \"x-IBM833\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM834\",\n-                                        \"value\": \"x-IBM834\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM856\",\n-                                        \"value\": \"x-IBM856\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM874\",\n-                                        \"value\": \"x-IBM874\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM875\",\n-                                        \"value\": \"x-IBM875\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM921\",\n-                                        \"value\": \"x-IBM921\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM922\",\n-                                        \"value\": \"x-IBM922\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM930\",\n-                                        \"value\": \"x-IBM930\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM933\",\n-                                        \"value\": \"x-IBM933\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM935\",\n-                                        \"value\": \"x-IBM935\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM937\",\n-                                        \"value\": \"x-IBM937\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM939\",\n-                                        \"value\": \"x-IBM939\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM942\",\n-                                        \"value\": \"x-IBM942\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM942C\",\n-                                        \"value\": \"x-IBM942C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM943\",\n-                                        \"value\": \"x-IBM943\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM943C\",\n-                                        \"value\": \"x-IBM943C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM948\",\n-                                        \"value\": \"x-IBM948\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM949\",\n-                                        \"value\": \"x-IBM949\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM949C\",\n-                                        \"value\": \"x-IBM949C\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM950\",\n-                                        \"value\": \"x-IBM950\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM964\",\n-                                        \"value\": \"x-IBM964\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-IBM970\",\n-                                        \"value\": \"x-IBM970\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISCII91\",\n-                                        \"value\": \"x-ISCII91\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISO-2022-CN-CNS\",\n-                                        \"value\": \"x-ISO-2022-CN-CNS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-ISO-2022-CN-GB\",\n-                                        \"value\": \"x-ISO-2022-CN-GB\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-iso-8859-11\",\n-                                        \"value\": \"x-iso-8859-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-JIS0208\",\n-                                        \"value\": \"x-JIS0208\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-JISAutoDetect\",\n-                                        \"value\": \"x-JISAutoDetect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-Johab\",\n-                                        \"value\": \"x-Johab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacArabic\",\n-                                        \"value\": \"x-MacArabic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCentralEurope\",\n-                                        \"value\": \"x-MacCentralEurope\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCroatian\",\n-                                        \"value\": \"x-MacCroatian\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacCyrillic\",\n-                                        \"value\": \"x-MacCyrillic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacDingbat\",\n-                                        \"value\": \"x-MacDingbat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacGreek\",\n-                                        \"value\": \"x-MacGreek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacHebrew\",\n-                                        \"value\": \"x-MacHebrew\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacIceland\",\n-                                        \"value\": \"x-MacIceland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacRoman\",\n-                                        \"value\": \"x-MacRoman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacRomania\",\n-                                        \"value\": \"x-MacRomania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacSymbol\",\n-                                        \"value\": \"x-MacSymbol\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacThai\",\n-                                        \"value\": \"x-MacThai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacTurkish\",\n-                                        \"value\": \"x-MacTurkish\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MacUkraine\",\n-                                        \"value\": \"x-MacUkraine\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS932_0213\",\n-                                        \"value\": \"x-MS932_0213\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS950-HKSCS\",\n-                                        \"value\": \"x-MS950-HKSCS\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-MS950-HKSCS-XP\",\n-                                        \"value\": \"x-MS950-HKSCS-XP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-mswin-936\",\n-                                        \"value\": \"x-mswin-936\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-PCK\",\n-                                        \"value\": \"x-PCK\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-SJIS_0213\",\n-                                        \"value\": \"x-SJIS_0213\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-UTF-16LE-BOM\",\n-                                        \"value\": \"x-UTF-16LE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"X-UTF-32BE-BOM\",\n-                                        \"value\": \"X-UTF-32BE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"X-UTF-32LE-BOM\",\n-                                        \"value\": \"X-UTF-32LE-BOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-50220\",\n-                                        \"value\": \"x-windows-50220\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-50221\",\n-                                        \"value\": \"x-windows-50221\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-874\",\n-                                        \"value\": \"x-windows-874\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-949\",\n-                                        \"value\": \"x-windows-949\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-950\",\n-                                        \"value\": \"x-windows-950\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"x-windows-iso2022jp\",\n-                                        \"value\": \"x-windows-iso2022jp\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set that should be used to encode the textual content of the SQS message\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications 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\": \"Communications Timeout\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\n+                            \"blob-name-prefix\": {\n+                                \"description\": \"Search prefix for listing\",\n+                                \"displayName\": \"Blob Name Prefix\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"name\": \"blob-name-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue to get messages from\",\n-                                \"displayName\": \"Queue URL\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Queue URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Receive Message Wait Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The maximum amount of time to wait on a long polling receive call. Setting this to a value of 1 second or greater will reduce the number of SQS requests and decrease fetch latency at the cost of a constantly active thread.\",\n-                                \"displayName\": \"Receive Message Wait Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Message Wait Time\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\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\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\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-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\n+                                        \"dependentValues\": [\n+                                            \"entities\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Visibility Timeout\": {\n-                                \"defaultValue\": \"15 mins\",\n-                                \"description\": \"The amount of time after a message is received but not deleted that the message is hidden from other consumers\",\n-                                \"displayName\": \"Visibility Timeout\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\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 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\": \"Visibility Timeout\",\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.\",\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+                                \"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\": \"2.0.0-M3\"\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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\": \"FlowFiles are routed to success 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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Fetch\",\n-                            \"Get\",\n-                            \"Poll\",\n-                            \"Queue\",\n-                            \"SQS\"\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.aws.sqs.GetSQS\",\n-                        \"typeDescription\": \"Fetches messages from an Amazon Simple Queuing Service Queue\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The MD5 sum of the message\",\n-                                \"name\": \"hash.value\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The unique identifier of the SQS message\",\n-                                \"name\": \"sqs.message.id\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"The SQS Receipt Handle that is to be used to delete the message from the queue\",\n-                                \"name\": \"sqs.receipt.handle\"\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\": \"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                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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\": \"Allows the user to add key/value pairs as Message Attributes by adding a property whose name will become the name of the Message Attribute and value will become the value of the Message Attribute\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a Message Attribute to add to the message\",\n-                                \"value\": \"The value of the Message Attribute\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-aws-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"Maximum File Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Delay\": {\n-                                \"defaultValue\": \"0 secs\",\n-                                \"description\": \"The amount of time to delay the message before it becomes available to consumers\",\n-                                \"displayName\": \"Delay\",\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\": \"Delay\",\n+                                \"name\": \"Minimum File Age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Endpoint Override URL\": {\n-                                \"description\": \"Endpoint URL to use instead of the AWS default including scheme, host, port, and path. The AWS libraries select an endpoint URL based on the AWS region, but this property overrides the selected endpoint URL, allowing use with other S3-compatible endpoints.\",\n-                                \"displayName\": \"Endpoint Override URL\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Minimum File Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue to act upon\",\n-                                \"displayName\": \"Queue URL\",\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\": \"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\": \"2.0.0-M3\"\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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-East)\",\n-                                        \"value\": \"us-gov-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n-                                        \"displayName\": \"AWS GovCloud (US-West)\",\n-                                        \"value\": \"us-gov-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-south-1\",\n-                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n-                                        \"value\": \"ap-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Osaka)\",\n-                                        \"value\": \"ap-northeast-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Seoul)\",\n-                                        \"value\": \"ap-northeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Singapore)\",\n-                                        \"value\": \"ap-southeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n-                                        \"displayName\": \"Asia Pacific (Sydney)\",\n-                                        \"value\": \"ap-southeast-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n-                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n-                                        \"value\": \"ap-northeast-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-central-1\",\n-                                        \"displayName\": \"Canada (Central)\",\n-                                        \"value\": \"ca-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : ca-west-1\",\n-                                        \"displayName\": \"Canada West (Calgary)\",\n-                                        \"value\": \"ca-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-north-1\",\n-                                        \"displayName\": \"China (Beijing)\",\n-                                        \"value\": \"cn-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-1\",\n-                                        \"displayName\": \"Europe (Frankfurt)\",\n-                                        \"value\": \"eu-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-1\",\n-                                        \"displayName\": \"Europe (Ireland)\",\n-                                        \"value\": \"eu-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-2\",\n-                                        \"displayName\": \"Europe (London)\",\n-                                        \"value\": \"eu-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-1\",\n-                                        \"displayName\": \"Europe (Milan)\",\n-                                        \"value\": \"eu-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-west-3\",\n-                                        \"displayName\": \"Europe (Paris)\",\n-                                        \"value\": \"eu-west-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-south-2\",\n-                                        \"displayName\": \"Europe (Spain)\",\n-                                        \"value\": \"eu-south-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\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\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"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\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"deduplication-message-id\": {\n-                                \"description\": \"The token used for deduplication of sent messages\",\n-                                \"displayName\": \"Deduplication Message 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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"deduplication-message-id\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"message-group-id\": {\n-                                \"description\": \"If using FIFO, the message group to which the FlowFile belongs\",\n-                                \"displayName\": \"Message Group ID\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"file-filter\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-group-id\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"include-temporary-files\",\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+                                \"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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"path-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\"\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\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\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-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Publish\",\n-                            \"Put\",\n-                            \"Queue\",\n-                            \"SQS\"\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.aws.sqs.PutSQS\",\n-                        \"typeDescription\": \"Publishes a message to an Amazon Simple Queuing Service Queue\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mqtt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M3\",\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+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93175,470 +94292,527 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"adls-credentials-service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n+                                \"displayName\": \"ADLS Credentials\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Broker URI\",\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\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Client ID\": {\n-                                \"description\": \"MQTT client ID to use. If not set, a UUID will be generated.\",\n-                                \"displayName\": \"Client ID\",\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Client ID\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-strategy\",\n+                                \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout (seconds)\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\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+                            \"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\": \"Group ID\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\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+                            \"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\": \"Last Will Message\",\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\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"Last Will QoS Level\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-directory-name\",\n                                 \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-filesystem-name\",\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-                            \"Last Will Topic\": {\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+                        \"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.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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Client-Side Encryption Key ID\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n                                     }\n                                 ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\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\": \"Last Will Topic\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Client-Side Encryption Key ID\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"MQTT Specification Version\": {\n+                            \"Client-Side Encryption Key Type\": {\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+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\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+                                \"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\": \"MQTT Specification Version\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\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+                            \"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\": \"Max Queue Size\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"Password\",\n-                                \"required\": false,\n                                 \"sensitive\": true\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+                            \"File Resource Service\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\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+                                \"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\": \"Quality of Service(QoS)\",\n+                                \"name\": \"File Resource Service\",\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+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n+                                        \"description\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\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\": \"Session Expiry Interval\",\n-                                \"required\": false,\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"blob-name\": {\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"conflict-resolution-strategy\": {\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\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\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\": \"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\": \"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\": \"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\": \"Session state\",\n+                                \"name\": \"conflict-resolution-strategy\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Topic Filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"add-attributes-as-fields\": {\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-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\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\": \"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\": \"add-attributes-as-fields\",\n+                                \"name\": \"create-container\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                            \"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+                                \"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\": \"2.0.0-M3\"\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+                            \"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\": \"record-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n+                            \"org.apache.nifi.processors.azure.storage.CopyAzureBlobStorage_v12\",\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\": \"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\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The MQTT message output\",\n-                                \"name\": \"Message\"\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                         \"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+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"MQTT broker that was the message source\",\n-                                \"name\": \"mqtt.broker\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"MQTT topic on which message was received\",\n-                                \"name\": \"mqtt.topic\"\n+                                \"description\": \"Primary location of the blob\",\n+                                \"name\": \"azure.primaryUri\"\n                             },\n                             {\n-                                \"description\": \"The quality of service for this message.\",\n-                                \"name\": \"mqtt.qos\"\n+                                \"description\": \"ETag of the blob\",\n+                                \"name\": \"azure.etag\"\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+                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n+                                \"name\": \"azure.blobtype\"\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\": \"MIME Type of the content\",\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+                            },\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\": false,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93651,546 +94825,1001 @@\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"Connection Timeout (seconds)\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Alive Interval (seconds)\",\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-                                \"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\": \"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+                            \"File Resource Service\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"description\": \"QoS level to be used when publishing the Last Will Message.\",\n-                                \"displayName\": \"Last Will QoS Level\",\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\": \"Last Will QoS Level\",\n+                                \"name\": \"File Resource 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.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\n                             },\n-                            \"Last Will Retain\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n+                                        \"description\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\n                                     }\n                                 ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\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\": \"Last Will Retain\",\n+                                \"name\": \"Resource Transfer Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will Topic\": {\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\": \"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\": \"2.0.0-M3\"\n+                                }\n+                            },\n+                            \"base-temporary-path\": {\n+                                \"defaultValue\": \"\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n+                                        \"dependentValues\": [\n+                                            \"WRITE_AND_RENAME\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Writing Strategy\",\n+                                        \"propertyName\": \"writing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"base-temporary-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"MQTT Specification Version\": {\n+                            \"conflict-resolution-strategy\": {\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+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\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+                                \"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\": \"MQTT Specification Version\",\n+                                \"name\": \"conflict-resolution-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\n-                                \"displayName\": \"Password\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"file-name\": {\n+                                \"defaultValue\": \"${azure.filename}\",\n+                                \"description\": \"The filename\",\n+                                \"displayName\": \"File Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quality of Service(QoS)\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Retain Message\",\n+                                \"name\": \"filesystem-name\",\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. 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.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                            \"writing-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\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-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\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-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\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\": \"Session Expiry Interval\",\n-                                \"required\": false,\n+                                \"name\": \"writing-strategy\",\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-                            \"Session state\": {\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+                        \"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.PutAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Auto Delete Messages\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n                                         \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\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+                                \"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\": \"Session state\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Topic\": {\n-                                \"description\": \"The topic to publish the message to.\",\n-                                \"displayName\": \"Topic\",\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\": \"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\": \"2.0.0-M3\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Topic\",\n+                                \"name\": \"Queue Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username to use when connecting to the broker\",\n-                                \"displayName\": \"Username\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Timeout\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"message-demarcator\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Visibility Timeout\",\n+                                \"required\": true,\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+                            \"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+                                \"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\": \"2.0.0-M3\"\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_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+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": 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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\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\": \"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\": \"2.0.0-M3\"\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+                            \"Queue Name\": {\n+                                \"description\": \"Name of the Azure Storage Queue\",\n+                                \"displayName\": \"Queue Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Request Timeout\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M3\"\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.mqtt.ConsumeMQTT\"\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n+                                \"description\": \"All successfully processed FlowFiles 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\": \"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                         \"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+                            \"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.mqtt.PublishMQTT\",\n-                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\"\n                     }\n                 ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-http-context-map-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"reportingTasks\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-http-context-map-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Application ID\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Outstanding Requests\",\n+                                \"name\": \"Batch Size\",\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+                            \"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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance ID\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance URL\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Job Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"Request Expiration\",\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, UPLOAD, 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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, UPLOAD, 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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-id-filter-exclude\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-name-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"start-position\",\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\": \"2.0.0-M3\"\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"request\",\n-                            \"response\"\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"provenace\",\n+                            \"reporting\"\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+                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events to to a Azure Log Analytics workspace.\",\n                         \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"1 min\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-config-file\",\n+                                \"name\": \"Application ID\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Instance ID\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Job Name\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"app-config-json\",\n+                                \"name\": \"Log Analytics Custom Log Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics URL Endpoint Format\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Log Analytics Workspace Id\",\n+                                \"required\": true,\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+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"box-account-id\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Process group ID(s)\",\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+                            \"Send JVM Metrics\": {\n+                                \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Send JVM Metrics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-box-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"box\",\n-                            \"client\",\n-                            \"provider\"\n+                            \"azure\",\n+                            \"log analytics\",\n+                            \"metrics\",\n+                            \"reporting\"\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.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\": \"2.0.0-M3\"\n                     }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n+                ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M3\"\n         },\n         {\n             \"artifact\": \"nifi-dbcp-service-nar\",\n             \"componentManifest\": {\n@@ -94303,16 +95932,16 @@\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"database-driver-locations\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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@@ -94542,16 +96171,16 @@\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n                                 \"name\": \"hikaricp-driver-locations\",\n                                 \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n                                         \"FILE\",\n-                                        \"DIRECTORY\",\n-                                        \"URL\"\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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@@ -94608,1948 +96237,380 @@\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-validation-query\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-record-sink-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-                                \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"db-record-sink-table-name\",\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-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"db\",\n-                            \"jdbc\",\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-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-shopify-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-shopify-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"CUSTOMERS\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"DISCOUNTS\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INVENTORY\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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-                                    },\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\": \"ORDERS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PRODUCT\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SALES_CHANNELS\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"STORE_PROPERTIES\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"incremental-delay\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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 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\": \"is-incremental\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"object-category\": {\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-                                    },\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-                                \"description\": \"Shopify object category\",\n-                                \"displayName\": \"Object Category\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"result-limit\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"2.0.0-M3\"\n-                                }\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-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"shopify\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-apicurio-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-apicurio-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\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. The cache size must be a non-negative integer. When it is set to 0, the cache is effectively disabled.\",\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 Group ID\": {\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"The artifact Group ID for the schemas\",\n-                                \"displayName\": \"Schema Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema Group ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Schema Registry URL\": {\n-                                \"description\": \"The URL of the Schema Registry e.g. http://localhost:8080\",\n-                                \"displayName\": \"Schema Registry URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Registry 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-                                \"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\": \"2.0.0-M3\"\n-                                }\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\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"apicurio\",\n-                            \"avro\",\n-                            \"registry\",\n-                            \"schema\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.apicurio.schemaregistry.ApicurioSchemaRegistry\",\n-                        \"typeDescription\": \"Provides a Schema Registry that interacts with the Apicurio Schema Registry so that those Schemas that are stored in the Apicurio Schema Registry can be used in NiFi. When a Schema is looked up by name by this registry, it will find a Schema in the Apicurio Schema Registry with their artifact identifiers.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                                \"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-                            \"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-                            \"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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"service-account-json\": {\n-                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n-                                \"displayName\": \"Service Account JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                                \"artifact\": \"nifi-gcp-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n-                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Name\",\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\": \"2.0.0-M3\"\n-                                }\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-                                \"version\": \"2.0.0-M3\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"file\",\n-                            \"gcs\",\n-                            \"resource\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.GCSFileResourceService\",\n-                        \"typeDescription\": \"Provides a Google Compute Storage (GCS) file resource for other components.\",\n-                        \"version\": \"2.0.0-M3\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bigquery-api-endpoint\",\n-                                \"required\": true,\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-                                \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\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-                                \"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\": \"2.0.0-M3\"\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\": \"Environment variables 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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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-                            \"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\": \"2.0.0-M3\"\n-                                }\n-                            }\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-                            },\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-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n-                                    {\n-                                        \"configuration\": \"The \\\"Folder ID\\\" property should be set to the ID of the Google Drive folder that files reside in.     See processor documentation / additional details for more information on how to determine a Google Drive folder's ID.\\n    If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GOOGLE_DRIVE_FOLDER_ID}`.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the folder.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGoogleDrive.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n-                                    },\n-                                    {\n-                                        \"configuration\": \"\\\"File ID\\\" = \\\"${drive.id}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\"\n-                                    }\n-                                ],\n-                                \"description\": \"Retrieve all files in a Google Drive folder\",\n-                                \"keywords\": [\n-                                    \"google\",\n-                                    \"drive\",\n-                                    \"google cloud\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\n-                            \"Google Doc Export 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-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"application/zip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EPUB\",\n-                                        \"value\": \"application/epub+zip\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Doc Export Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Google Drawing Export Type\": {\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-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SVG\",\n-                                        \"value\": \"image/svg+xml\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Google Drawing Export Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Google Presentation Export Type\": {\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-                                    },\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\": \"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\": \"Google Presentation Export Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"Microsoft Excel\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\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-                                    {\n-                                        \"description\": \"\",\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\": \"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\": \"Google Spreadsheet Export Type\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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-                        \"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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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-                                \"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\": \"2.0.0-M3\"\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+                            \"hikaricp-password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-username\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"folder-id\",\n-                                \"required\": true,\n+                                \"name\": \"hikaricp-validation-query\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-catalog-name\",\n+                                \"required\": false,\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+                            \"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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"db-record-sink-dcbp-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.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M3\"\n                                 }\n                             },\n-                            \"listing-strategy\": {\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"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\": \"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\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-quoted-identifiers\",\n+                                \"required\": false,\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+                            \"db-record-sink-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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-quoted-table-identifiers\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-schema-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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"db-record-sink-table-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"recursive-search\": {\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\": \"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+                                \"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\": \"recursive-search\",\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.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+                        \"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.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"db\",\n+                            \"jdbc\",\n+                            \"record\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-key\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"refresh-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n-                        ]\n-                    },\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"credentials\",\n+                            \"dropbox\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n+                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-workday-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-workday-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -96558,775 +96619,863 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": 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.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"version\": \"2.0.0-M3\"\n+                                }\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"Workday Report URL\",\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder-id\",\n+                                \"name\": \"Workday 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+                            \"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\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"record-reader\",\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.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"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\": \"2.0.0-M3\"\n                                 }\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\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+                                \"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 200 and 299.\",\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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"Workday\",\n+                            \"report\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.class\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\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 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 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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-proxy-configuration-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-proxy-configuration-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\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+                            \"proxy-server-host\": {\n+                                \"description\": \"Proxy server hostname or ip-address.\",\n+                                \"displayName\": \"Proxy Server Host\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-server-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"proxy-server-port\": {\n+                                \"description\": \"Proxy server port number.\",\n+                                \"displayName\": \"Proxy Server Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"proxy-server-port\",\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+                            \"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\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"proxy-type\",\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+                            \"proxy-user-name\": {\n+                                \"description\": \"The name of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-user-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: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"proxy-user-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"socks-version\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS4\",\n+                                        \"value\": \"SOCKS4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS5\",\n+                                        \"value\": \"SOCKS5\"\n+                                    }\n+                                ],\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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"socks-version\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"pubsub\"\n+                            \"Proxy\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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+                        \"type\": \"org.apache.nifi.proxy.StandardProxyConfigurationService\",\n+                        \"typeDescription\": \"Provides a set of configurations for different NiFi components to use a proxy server.\",\n+                        \"version\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-registry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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+                                \"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-                        \"multiProcessorUseCases\": [],\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\": \"2.0.0-M3\"\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+                            \"avro-reg-validated-field-names\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"Maximum Message Size\",\n+                                \"name\": \"avro-reg-validated-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"Message Derivation Strategy\": {\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"f2215c6\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\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+                        \"propertyDescriptors\": {\n+                            \"JSON Schema Version\": {\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\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\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+                                        \"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\": \"FLOWFILE_ORIENTED\",\n-                                \"description\": \"The strategy used to publish the incoming FlowFile to the Google Cloud PubSub endpoint.\",\n-                                \"displayName\": \"Message Derivation Strategy\",\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\": \"Message Derivation Strategy\",\n+                                \"name\": \"JSON Schema Version\",\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.JsonSchemaRegistry\",\n+                                \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"f2215c6\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Keystore Filename\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Record Writer\": {\n-                                \"dependencies\": [\n+                            \"Keystore Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\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 Record Writer to use in order to serialize the data before sending to GCPubSub endpoint\",\n-                                \"displayName\": \"Record Writer\",\n+                                \"description\": \"The Type of the Keystore\",\n+                                \"displayName\": \"Keystore 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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"Keystore Type\",\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Protocol\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"name\": \"Truststore Filename\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"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\": \"gcp-pubsub-publish-batch-delay\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"Truststore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"Truststore 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 Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-topic\",\n-                                \"required\": true,\n+                                \"name\": \"Truststore Type\",\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+                            \"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\": \"proxy-configuration-service\",\n+                                \"name\": \"key-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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": true\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+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                \"version\": \"2.0.0-M3\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": 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+                            \"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.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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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.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\": \"2.0.0-M3\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-ssl-context-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"Keystore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Keystore\",\n+                                \"displayName\": \"Keystore Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Keystore Filename\",\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                                 \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Keystore Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-bytes-outstanding\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Keystore Type\",\n+                                \"required\": false,\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-messages-outstanding\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Protocol\",\n+                                \"required\": false,\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+                            \"Truststore Filename\": {\n+                                \"description\": \"The fully-qualified filename of the Truststore\",\n+                                \"displayName\": \"Truststore Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-subscription\",\n-                                \"required\": true,\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\": \"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 Truststore\",\n+                                \"displayName\": \"Truststore Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"pubsub\"\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.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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\": \"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-                            {\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+                        \"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\": \"2.0.0-M3\"\n+                    }\n+                ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-shared-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jslt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jslt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97334,313 +97483,353 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"name\": \"jslt-transform-cache-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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcp-ordering-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jslt-transform-pretty_print\",\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+                            \"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\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"name\": \"jslt-transform-result-filter\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-pubsub-publish-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"jslt-transform-transformation\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\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+                            \"jslt-transform-transformation-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n+                                        \"displayName\": \"Entire FlowFile\",\n+                                        \"value\": \"ENTIRE_FLOWFILE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Apply transformation each JSON Object in an array\",\n+                                        \"displayName\": \"Each JSON Object\",\n+                                        \"value\": \"EACH_OBJECT\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"EACH_OBJECT\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-topic\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jslt-transform-transformation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.ConsumeGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\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                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": 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+                                \"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-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"jslt\",\n+                            \"json\",\n+                            \"transform\"\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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-opentelemetry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-opentelemetry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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                         \"multiProcessorUseCases\": [],\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Address\",\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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client Authentication\",\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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Queue Capacity\",\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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Worker Threads\",\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\": \"Export Service Requests containing OTLP Telemetry\",\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+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\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.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+                        \"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                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\"\n-                    },\n+                        \"version\": \"2.0.0-M3\",\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-compress-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-compress-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97650,1353 +97839,828 @@\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-                        \"multiProcessorUseCases\": [\n-                            {\n-                                \"configurations\": [\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Input Compression Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"configuration\": \"The \\\"Bucket\\\" property should be set to the name of the GCS bucket that files reside in. If the flow being built is to be reused elsewhere, it's a good idea to parameterize     this property by setting it to something like `#{GCS_SOURCE_BUCKET}`.\\nConfigure the \\\"Project ID\\\" property to reflect the ID of your Google Compute Cloud Project.\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\\nThe 'success' Relationship of this Processor is then connected to FetchGCSObject.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.ListGCSBucket\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\n                                     },\n                                     {\n-                                        \"configuration\": \"\\\"Bucket\\\" = \\\"${gcs.bucket}\\\"\\n\\\"Name\\\" = \\\"${filename}\\\"\\n\\nThe \\\"GCP Credentials Provider Service\\\" property should specify an instance of the GCPCredentialsService in order to provide credentials for accessing the bucket.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\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+                                    },\n+                                    {\n+                                        \"description\": \"ZSTD\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Brotli\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n                                     }\n                                 ],\n-                                \"description\": \"Retrieve all files in a Google Compute Storage (GCS) bucket\",\n-                                \"keywords\": [\n-                                    \"gcp\",\n-                                    \"gcs\",\n-                                    \"google cloud\",\n-                                    \"google compute storage\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n-                                    \"stream\"\n-                                ],\n-                                \"notes\": \"\"\n-                            }\n-                        ],\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+                                \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Input Compression 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\": \"2.0.0-M3\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\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+                            \"Output 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\": \"Output Compression Strategy\",\n+                                        \"propertyName\": \"Output Compression Strategy\"\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                                 \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"name\": \"Output Compression Level\",\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\": \"Environment variables 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\": \"Key\",\n+                            \"Output Compression Strategy\": {\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+                                    },\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\": \"no compression\",\n+                                \"description\": \"The strategy to use for compressing output FlowFiles\",\n+                                \"displayName\": \"Output Compression Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Compression Strategy\",\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\": \"Environment variables 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\": \"Environment variables 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\": \"Environment variables 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. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Output Filename Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n+                                        \"displayName\": \"Original\",\n+                                        \"value\": \"ORIGINAL\"\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+                                    }\n+                                ],\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\": \"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\": \"2.0.0-M3\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n+                                \"name\": \"Output Filename Strategy\",\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.ListGCSBucket\",\n-                            \"org.apache.nifi.processors.gcp.storage.PutGCSObject\"\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\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n+                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\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                         \"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-                            \"fetch\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\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.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.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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\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+                                \"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\": \"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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Cluster Max Redirects\",\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\": \"2.0.0-M3\"\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-                            \"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+                            \"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\": \"et-state-cache\",\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\": \"2.0.0-M3\"\n-                                }\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"name\": \"Communication Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\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+                                \"name\": \"Connection String\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-bucket\": {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"name\": \"Database Index\",\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcs-prefix\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"gcs-use-generations\": {\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\": \"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+                                \"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\": \"gcs-use-generations\",\n+                                \"name\": \"Pool - Block When Exhausted\",\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+                            \"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\": \"listing-strategy\",\n+                                \"name\": \"Pool - Max Idle\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Pool - Max Total\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\n-                                }\n+                                \"name\": \"Pool - Max Wait Time\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pool - Min Evictable Idle Time\",\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.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-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"list\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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-                            },\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\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"f2215c6\"\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 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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n-                        \"propertyDescriptors\": {\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+                            \"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\": \"File Resource Service\",\n+                                \"name\": \"Pool - Min Idle\",\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\": \"2.0.0-M3\"\n-                                }\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+                            \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"Pool - Num Tests Per Eviction Run\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Resource Transfer Source\": {\n+                            \"Pool - Test On Borrow\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\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\": \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-bucket\",\n+                                \"name\": \"Pool - Test On Borrow\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-content-disposition-type\": {\n+                            \"Pool - Test On Create\": {\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\": \"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\": \"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\": \"Environment variables 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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"Pool - Test On Create\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-object-acl\": {\n+                            \"Pool - Test On Return\": {\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-                                    },\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-                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-object-crc32c\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Test On Return\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-overwrite-object\": {\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\": \"true\",\n-                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n-                                \"displayName\": \"Overwrite Object\",\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\": \"gcs-overwrite-object\",\n+                                \"name\": \"Pool - Test While Idle\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables 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\": \"Pool - Time Between Eviction Runs\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"gzip.content.enabled\": {\n+                            \"Redis Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"A single standalone Redis instance.\",\n+                                        \"displayName\": \"Standalone\",\n+                                        \"value\": \"Standalone\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"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\": \"gzip.content.enabled\",\n-                                \"required\": false,\n+                                \"name\": \"Redis Mode\",\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+                            \"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\": \"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\": \"2.0.0-M3\"\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+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-api-url\",\n+                                \"name\": \"Sentinel Master\",\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\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Sentinel Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n+                            \"Username\": {\n+                                \"description\": \"The username used to authenticate to the Redis server.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-redis-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"put\"\n+                            \"cache\",\n+                            \"redis\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M3\",\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.redis.service.RedisConnectionPoolService\",\n+                        \"typeDescription\": \"A service that provides connections to Redis.\",\n+                        \"version\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"gcp-credentials-provider-service\",\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-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M3\"\n                             },\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\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-                        \"multiProcessorUseCases\": [],\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+                            \"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\": \"gcp-credentials-provider-service\",\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-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n                                     \"version\": \"2.0.0-M3\"\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\": \"Environment variables 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-                        \"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-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\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\": \"2.0.0-M3\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"redis\"\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-                        \"useCases\": [],\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\": \"2.0.0-M3\"\n-                    },\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -99005,111 +98669,136 @@\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                         \"multiProcessorUseCases\": [],\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+                            \"charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set to use when storing record field values as strings. All fields will be converted to strings using this character set before being stored in Redis.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"data-record-path\": {\n+                                \"defaultValue\": \"/\",\n+                                \"description\": \"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 Redis instead of sending the entire incoming Record. The property defaults to the root '/' which corresponds to a 'flat' record (all fields/values at the top level of  the Record.\",\n+                                \"displayName\": \"Data Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"data-record-path\",\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\": \"2.0.0-M3\"\n-                                }\n+                                \"sensitive\": false\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+                            \"hash-value-record-path\": {\n+                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the hash value associated with all the record fields/values (see 'hset' in Redis documentation for more details). The RecordPath must point at exactly one field or an error will occur.\",\n+                                \"displayName\": \"Hash Value Record Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hash-value-record-path\",\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 parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n-                                \"required\": false,\n-                                \"sensitive\": 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\": \"2.0.0-M3\"\n+                                }\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+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\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\": \"2.0.0-M3\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"FlowFiles having all Records stored in Redis will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles containing Records with processing errors 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                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"hash\",\n+                            \"put\",\n+                            \"record\",\n+                            \"redis\"\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.redis.processor.PutRedisHashRecord\",\n+                        \"typeDescription\": \"Puts record field data into Redis using a specified hash value, which is determined by a RecordPath to a field in each record containing the hash value. The record fields and values are stored as key/value pairs associated by the hash value. NOTE: Neither the evaluated hash value nor any of the field values can be null. If the hash value is null, the FlowFile will be routed to failure. For each of the field values, if the value is null that field will be not set in Redis.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n+                                \"description\": \"Number of records written to Redis\",\n+                                \"name\": \"redis.success.record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M3\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cdc-mysql-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cdc-mysql-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"f2215c6\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -99117,134 +98806,445 @@\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                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\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+                            \"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\": \"gcp-credentials-provider-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\": \"2.0.0-M3\"\n+                                }\n+                            },\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\": \"SSL Mode\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-db-name-pattern\",\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+                                \"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-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\": \"2.0.0-M3\"\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+                            \"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\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"json-payload\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-driver-locations\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-include-begin-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\": \"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\": \"capture-change-mysql-include-begin-commit\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-include-ddl-events\",\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 environment properties.\",\n+                                \"displayName\": \"Initial Binlog Filename\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-binlog-filename\",\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+                            \"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 environment properties.\",\n+                                \"displayName\": \"Initial Binlog Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"vision-feature-type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-init-binlog-position\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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 environment properties.\",\n+                                \"displayName\": \"Initial Binlog GTID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-password\": {\n+                                \"description\": \"Password to access the MySQL cluster\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"capture-change-mysql-retrieve-all-records\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-server-id\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-state-update-interval\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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\": \"capture-change-mysql-use-gtid\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"capture-change-mysql-username\": {\n+                                \"description\": \"Username to access the MySQL cluster\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"capture-change-mysql-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"events-per-flowfile-strategy\": {\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+                                    },\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+                                    }\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\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"number-of-events-per-flowfile\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\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\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 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                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"cdc\",\n+                            \"event\",\n+                            \"jdbc\",\n+                            \"mysql\",\n+                            \"sql\",\n+                            \"transaction\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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                         \"useCases\": [],\n                         \"version\": \"2.0.0-M3\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\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\": \"2.0.0-M3\"\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\": \"2.0.0-M3\"\n-        },\n-        {\n-            \"artifact\": \"nifi-provenance-repository-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M3\"\n         }\n     ],\n     \"identifier\": \"apache-nifi\",\n     \"schedulingDefaults\": {\n         \"defaultConcurrentTasksBySchedulingStrategy\": {\n             \"CRON_DRIVEN\": 1,\n             \"TIMER_DRIVEN\": 1\n"}]}]}
